Märkus
Juurdepääs sellele lehele nõuab autoriseerimist. Võite proovida sisse logida või kausta vahetada.
Juurdepääs sellele lehele nõuab autoriseerimist. Võite proovida kausta vahetada.
Kuna lõuendirakendused arenevad, et vastata erinevatele ärinõuetele, muutub optimaalse jõudluse säilitamise väljakutse kriitiliseks kaalutluseks. Andmetöötluse, kasutajaliidese kujunduse ja lõuendirakenduste funktsionaalsuse keerukus nõuab nüansirikast lähenemist koodi optimeerimisele.
Kuna lõuendirakendused muutuvad keerukamaks, puutuvad arendajad kokku väljakutsetega, mis on seotud andmete otsimise, valemite keerukuse ja renderdamiskiirusega. Vajadus leida tasakaal tugeva funktsionaalsuse ja tundlike kasutajaliideste vahel rõhutab, kui oluline on võtta kasutusele süstemaatiline lähenemine koodi optimeerimisele.
Power Fx Valemite optimeerimine
Funktsiooniga
Funktsioon With
hindab ühe kirje valemit. Valem saab arvutada väärtuse ja/või teha toiminguid (nt andmete muutmine või ühendusega töötamine). Kasutage funktsiooni With keerukate valemite loetavuse parandamiseks, jagades selle väiksemateks nimega alamvalemiteks. Need nimetatud väärtused toimivad nagu lihtsad kohalikud muutujad, mis piirduvad funktsiooni With. Funktsiooni With kasutamist eelistatakse konteksti või globaalsete muutujate asemel, kuna see on iseseisev, kergesti mõistetav ja seda saab kasutada mis tahes deklaratiivse valemi kontekstis.
Lisateave funktsiooni kohta With
.
Samaaegne funktsioon
Funktsioon Concurrent
võimaldab samaaegselt hinnata mitut sama atribuudi piires määratud valemit, kui neil on konnektor või Dataverse kõned. Tavaliselt hinnatakse mitut valemit, aheldades need kokku ;
(semikoolon) operaatoriga, mis hindab iga valemit järjest. Funktsiooni abil Concurrent
hindab rakendus kõiki atribuudi valemeid samaaegselt isegi pärast tehtemärgi kasutamist ;
. See samaaegsus aitab kasutajatel sama tulemust vähem oodata. Kui andmesidekõned ei käivitu enne eelmiste kõnede lõpuleviimist, peab rakendus ootama kõigi taotluseaegade summat. Kui andmesidekõned algavad samal ajal, peab rakendus ootama ainult pikimat taotluseaega.
Lisateave funktsiooni kohta Concurrent
.
Concurrent(
ClearCollect(colAccounts1, Accounts),
ClearCollect(colUsers1, Users),
ClearCollect(colEnvDef1, 'Environment Variable Definitions'),
ClearCollect(colEnvVal1, 'Environment Variable Values')
);
Ühendamise funktsioon
Funktsioon Coalesce
hindab oma argumente järjekorras ja tagastab esimese väärtuse, mis pole tühi või tühi string. Selle funktsiooni abil saate asendada tühja väärtuse või tühja stringi mõne muu väärtusega, kuid jätta mittetühjad ja mittetühjad stringiväärtused muutmata. Kui kõik argumendid on tühjad või tühjad stringid, tagastab funktsioon tühja, mistõttu on Coalesce hea viis tühjade stringide teisendamiseks tühjadeks väärtusteks.
Näiteks:
If(Not IsBlank(value1), value1, Not IsBlank(value2), value2)
Nõuab väärtuste 1 ja 2 kahekordset hindamist. Seda funktsiooni saab taandada järgmiselt:
Coalesce(value1, value2)
Funktsioon IsMatch
Funktsioon IsMatch
testib, kas tekstistring vastab mustrile, mis võib koosneda tavalistest märkidest, eelmääratletud mustritest või regulaaravaldisest.
Lisateave funktsiooni kohta IsMatch
.
Näiteks vastab see valem Ameerika Ühendriikide sotsiaalkindlustusnumbrile:
IsMatch(TextInput1.Text, "\d{3}-\d{2}-\d{4}")
Regulaaravaldise selgitus:
\\d
Vastab mis tahes numbrile (0–9).
{3}
Määrab, et eelnev numbrimuster (\d) peaks esinema täpselt kolm korda.
-
Vastab sidekriipsu märgile.
{2}
Määrab, et eelnev numbrimuster (\d) peaks esinema täpselt kaks korda.
{4}
Määrab, et eelnev numbrimuster (\d) peaks esinema täpselt neli korda.
Veel näiteid IsMatch
:
IsMatch(TextInput1.Text, "Hello World")
IsMatch(TextInput1\_2.Text, "(?!^\[0-9\]\\\*$)(?!^\[a-zA-Z\]\\\*$)(\[a-zA-Z0-9\]{8,10})")
Rakenduse optimeerimine OnStart
OnStart
Cavase rakenduste atribuut mängib olulist rolli rakenduse käivitamisel toimuvate toimingute määratlemisel. See atribuut võimaldab rakenduste arendajatel täita globaalseid lähtestamisülesandeid, seadistada muutujaid ja teha toiminguid, mis peaksid rakenduse käivitusprotsessi ajal toimuma ainult üks kord. Atribuudi OnStart
mõistmine ja tõhus kasutamine on tundlike ja tõhusate lõuendirakenduste loomiseks hädavajalik.
Soovitatav lähenemisviis on funktsiooni sujuvamaks muutmine App.OnStart
, migreerides muutujate seadistused nimega valemitesse. Nimega valemid, eriti need, mis on konfigureeritud rakenduse elutsükli alguses, osutuvad kasulikuks. Need valemid tegelevad muutujate lähtestamisega andmekutsete põhjal, pakkudes teie koodile puhtamat ja organiseeritumat struktuuri. Lisateave Suurte ja keerukate lõuendirakenduste loomine - Power Apps | Microsoft Learn.
Märkus.
Omadus OnStart
on imperatiivne. See on järjestatud nimekiri töödest, mis tuleb teha enne esimese ekraani kuvamist. Kuna see on nii konkreetne mitte ainult selle kohta, mida on vaja teha, vaid ka selle kohta, millal seda tööd tuleb teha tellimuse alusel, piirab see ümberjärjestamist ja edasilükkamist optimeerimist, mida muidu saaks teha.
Avakuva
Kui App.OnStart
sisaldab funktsioonikutset Navigate
, isegi kui see on funktsioonis If
ja seda kutsutakse harva, peame rakenduse täitmise lõpule viima.
OnStart
enne rakenduse esimese ekraani kuvamist.
App.StartScreen
on uus deklaratiivne viis näidata, millist ekraani tuleks esimesena näidata, mis ei blokeeri optimeerimist.
Atribuudi StartScreen
määramine näitab esimest ekraani enne App.OnStart
lõpuleviimist.
App.StartScreen declares
millist ekraaniobjekti esimesena kuvada, ilma et oleks vaja eeltöötlust.
Selle asemel, et kirjutada sellist koodi:
App.OnStart = Collect(OrdersCache, Orders);
If(Param("AdminMode") = "1", Navigate(AdminScreen), Navigate(HomeScreen))
Muutke kood järgmiselt:
App.OnStart = Collect(OrdersCache, Orders);
App.StartScreen = If(Param("AdminMode") = "1", AdminScreen, HomeScreen)
Lisateabe saamiseks vaadake # <https://Power Apps.microsoft.com/en-us/blog/app-startscreen-a-new-declarative-alternative-to-navigate-in-app-onstart/> .
Hoiatus
Vältige sõltuvusi ja vahel. StartScreen
OnStart
Nimelisele valemile viitamine, mis omakorda viitab globaalsele muutujale, võib põhjustada võidujooksu tingimuse, mida StartScreen
ei rakendata õigesti.
Märkus: meil ei tohiks olla sõltuvusi StartScreeni ja OnStarti vahel. Blokeerime globaalsetele muutujatele viitamise StartScreenis, kuid saame viidata nimega valemile, mis omakorda viitab globaalsele muutujale ja mis võib põhjustada võidujooksu, mille korral StartScreeni ei rakendata õigesti.
Nimega valemid
Nimega valemid on staatilised või konstandid, mida saab määratleda jaotises App.Formulas. Kui need on App.Formulasis deklareeritud, saab neid kasutada kõikjal rakenduses ja nende väärtus on alati ajakohane. Nimega valemid võimaldavad Power Apps määratleda väärtusi või väärtuste kogumeid, mida platvorm automaatselt haldab ja värskendab. See funktsioon annab väärtuse arvutamise ja hooldamise vastutuse arendajalt Power Apps üle, muutes arendusprotsessi sujuvamaks. Nimega valemid Power Apps on võimas funktsioon, mis võib oluliselt parandada rakenduse jõudlust ja hooldatavust.
Nimega valemid võivad käsitleda ka rakenduse teemade deklareerimist. Paljudel juhtudel, kui ettevõtterakendusi koostatakse, soovime, et rakendusel oleksid ühtse ilme ja kasutuskogemuse tagamiseks ühised kujundused. Kujunduse loomiseks tuleb rakenduses OnStart deklareerida 10 ja 100 muutujat. See suurendas koodi pikkust ja rakenduse lähtestamisaega.
Kaasaegsed juhtelemendid võivad samuti oluliselt aidata teemade kujundamisel ja aidata vähendada klientide kirjutatud loogikat teemade käsitlemiseks. Kaasaegsed juhtelemendid on praegu eelvaates.
Näiteks saab teisaldada App.OnStart
järgmise koodi sisse App.Formulas
, vähendades seeläbi globaalsete muutujate deklaratsioonide käivitusaega.
Set(BoardDark, RGBA(181,136,99, 1));
Set(BoardSelect, RGBA(34,177,76,1));
Set(BoardRowWidth, 10); // expected 8 plus two guard characters for regular expressions.
Set(BoardMetadata, 8 \* BoardRowWidth + 1); // which player is next, have pieces moved for castling rules, etc.
Set(BoardBlank, "----------------------------------------------------------------\_00000000000000");
Set(BoardClassic, "RNBQKBNR\_\_PPPPPPPP------------------------\_--------\_\_pppppppp\_\_rnbqkbnr\_\_0000000000");
Koodi saab teisaldada App.Formulas’i järgmiselt.
BoardSize = 70;
BoardLight = RGBA(240,217,181, 1);
BoardDark = RGBA(181,136,99, 1);
BoardSelect = RGBA(34,177,76,1);
BoardRowWidth = 10; // expected 8 plus two guard characters for regular expressions
BoardMetadata = 8 \* BoardRowWidth + 1; // which player is next, have pieces moved for castling rules, etc.
BoardBlank = "----------------------------------------------------------------\_00000000000000";
BoardClassic = "RNBQKBNR\_\_PPPPPPPP------------------------\_--------\_\_pppppppp\_\_rnbqkbnr\_\_0000000000";
Teine näide on võõrastemaja seade. Lookups
Siin on vaja muuta otsinguvalemit, et tuua kasutajateave Office 365, mitte see Dataverse. On ainult üks koht, kus muudatus on vajalik ilma koodi igal pool muutmata.
UserEmail = User().Email;
UserInfo = LookUp(Users, 'Primary Email' = User().Email);
UserTitle = UserInfo.Title;
UserPhone = Switch(UserInfo.'Preferred Phone', 'Preferred Phone (Users)'.'Mobile Phone', UserInfo.'Mobile Phone',
UserInfo.'Main Phone');
Need valemid kehastavad arvutamise olemust. Nad sõnastavad protsessi määramiseks UserEmail
, UserInfo
, UserTitle
, ja UserPhone
põhineb muudel väärtustel. See loogika on kapseldatud, võimaldades laialdast kasutamist kogu rakenduses ja seda saab muuta ühes asukohas. Kohandatavus laieneb tabelilt Kasutajad konnektorile Dataverse üleminekuni Office 365 , ilma et oleks vaja muuta rakenduses laiali pillutatud valemeid.
Teine lähenemisviis on optimeerimine countRows
.
varListItems = CountRows(SampleList)
Funktsiooni korral Set
tuleb muutuja varListItems
lähtestada näidisloendi ridade esialgse arvuga ja pärast loendiüksuste lisamist või eemaldamist uuesti seadistada. Nimega valemite puhul värskendatakse muutujaid varListitems andmete muutumisel automaatselt.
Atribuudi nimega valemid App.Formulas
pakuvad paindlikumat ja deklaratiivsemat lähenemisviisi väärtuste ja arvutuste haldamiseks kogu rakenduses, pakkudes eeliseid ajastuse sõltumatuse, automaatsete värskenduste, hooldatavuse ja muutumatute määratluste osas võrreldes ainult tuginemisega App.OnStart
.
Aspekt | Nimega valemid (App.Formulas) | App.OnStart |
---|---|---|
Ajastuse sõltumatus | Valemid on koheselt kättesaadavad, neid saab arvutada mis tahes järjekorras. | Muutujad võivad tekitada ajastuse sõltuvusi, mis mõjutavad kättesaadavust. |
Automaatsed uuendused | Valemid värskendatakse sõltuvuste muutumisel automaatselt. | Muutujad määratakse käivitamisel üks kord; Võib vaja minna käsitsi värskendusi. |
Hallatavus | Tsentraliseeritud valemid ühes kohas parandavad hooldatavust. | Hajutatud muutujad võivad vajada leidmist ja värskendamist mitmest kohast. |
Muutumatud definitsioonid | App.Formulas valemi definitsioonid on muutumatud. | Muutuvad väärtused võivad olla vastuvõtlikud juhuslikele muutustele. |
Kasutaja määratletud funktsioonid
Kasutaja määratletud funktsioonid on Authoring Studio eksperimentaalne funktsioon Power Apps , mis võimaldab kasutajatel luua oma kohandatud funktsiooni.
Selle funktsiooni kasutamiseks valige eksperimentaalsetes sätetes Uus analüüsimootor ja Kasutaja määratletud funktsioon (UDF-id)
Määratlege valem App.Formulas
järgmiselt:
FunctionName(Parameter1:DataType1, Parameter2:DataType2):OutputDataType = Formula
Kood toimib järgmiselt:
FunctionName
kasutatakse funktsiooni käivitamiseksParameter
on sisendi nimi. Lubatud on üks või mitu sisenditDataType
on funktsioon edastatud argument, peab vastama sellele andmetüübile. Saadaolevate andmetüüpide hulka kuuluvad kahendväärtus, värv, kuupäev, kuupäev, kellaaeg, GUID, hüperlink, tekst, kellaaeg, tüüpimata objektOutputDataType
on andmetüüp, milles funktsiooni väljund onFormula
on funktsiooni väljund
// Function to calculate the area of a circle based on the radius
calcAreaOfCircle(radius: Number): Number =
IfError(Pi() * radius * radius, 0);
Kasutage IfError
veakäsitluse rakendamiseks määratletud funktsioonis.
Kutsuge määratletud funktsiooni teksti/sildi juhtelemendist.
calcAreaOfCircle(Int(*TextInput1*.Text))
Märkus.
See on eksperimentaalne funktsioon ja võib muutuda. Mõnda andmetüüpi (nt kirjeid ja filtreid) veel ei toetata.
Muutujate optimeerimine
Muutujaid kasutatakse kohalike ja globaalsete väärtuste määratlemiseks ja määramiseks, mida kasutatakse kõikjal rakendustes. Kuigi need on mugavad, võib liiga palju neist muuta rakenduse vähem optimeerituks.
Järgmine näide näitab muutuja määramist objekti iga atribuudi jaoks, mida tuleb kasutada Set
iga atribuudi jaoks.
Set(varEmpName, Office365Users.MyProfile().DisplayName);
Set(varEmpCity, Office365Users.MyProfile().City);
Set(varEmpPhone, Office365Users.MyProfile().BusinessPhones);
Set(varEmpUPN, Office365Users.MyProfile().UserPrincipalName);
Set(varEmpMgrName, Office365Users.ManagerV2(varEmpUPN).DisplayName);
Optimeeritum lähenemisviis on kasutada omadust siis, kui seda vajate:
Set(varEmployee, Office365Users.MyProfile())
"Welcome " & varEmployee.DisplayName
Kasutage kontekstimuutujaid ja globaalseid muutujaid targalt. Kui muutuja ulatus laieneb ühest ekraanist kaugemale, kaaluge kontekstimuutujate asemel globaalsete muutujate kasutamist.
Liiga palju kasutamata muutujaid aitab kaasa mälukasutuse suurenemisele ja rakenduse pisut aeglasemale lähtestamisele. Seda seetõttu, et nende muutujate jaoks eraldatakse ressursse, kuigi neid aktiivselt ei kasutata. Liiga palju kasutamata muutujaid võib põhjustada ka rakenduse loogika üldist keerukust. Kuigi kasutamata muutujate mõju ei pruugi olla tõsine, on hea tava säilitada puhas ja hästi organiseeritud Power App, et tagada optimaalne jõudlus ja arenduse lihtsus.
Kollektsioonide optimeerimine
Kollektsioonid on ajutised andmesalvestusstruktuurid, mida saab kasutada andmete salvestamiseks ja nendega manipuleerimiseks rakenduses Power Apps . Siiski on piir, millal kogutud andmed võivad kaasa tuua jõudluse lisakulusid. Seetõttu piirake kollektsioonide kasutamist. Püüdke neid kasutada ainult siis, kui need on hädavajalikud.
// Use this pattern
ClearCollect(colErrors, {Text: gblErrorText, Code: gblErrorCode});
// Do not use this pattern
Clear(colErrors);
Collect(colErrors, {Text: gblErrorText, Code: gblErrorCode});
Kohaliku kogumi kirjete loendamiseks kasutage selle asemel funktsiooni CountIf
Count(Filter())
.
Kollektsioonidega töötamisel arvestage järgmise juhisega:
Piira kollektsioonide suurust ja arvu. Kuna kollektsioonid on rakenduses lokaalsed, salvestatakse need mobiilseadme mällu. Mida rohkem andmeid kogudes on või mida rohkem on kogusid, seda halvem on jõudlus. Ainult teatud veergude saamiseks kasutage funktsiooni ShowColumns
. Lisa funktsioon, et saada ainult asjakohased andmed. Filter
Järgnev näidisfunktsioon tagastab kogu andmestiku.
ClearCollect(colDemoAccount, Accounts);
Võrrelge alloleva koodiga, mis tagastab ainult teatud kirjed ja veerud:
ClearCollect(colAcc,
ShowColumns(
Filter(Accounts, !IsBlank('Address 1: City')),
"name","address1_city"))
Näidiskood tagastab selle andmestiku:
Määrake andmeallika värskendamise sagedus. Kui lisate kollektsiooni uusi kirjeid, peate uute või muudetud kirjete kollektsiooni saamiseks seda värskendama või sinna koguma. Kui teie andmeallikat värskendab mitu kasutajat, peate uute või muudetud kirjete saamiseks kogumit värskendama. Rohkem värskenduskõnesid tähendab rohkem suhtlust serveriga.
Vahemälu andmed kollektsioonides ja muutujates
Kogumik, mis on sisuliselt tabelimuutuja, eristub selle poolest, et see salvestab andmeridu ja -veergusid, mitte üksikut andmeüksust. Nende kasulikkus seisneb kahes peamises eesmärgis: esiteks andmete koondamiseks enne andmeallikale edastamist ja teiseks teabe vahemällu salvestamiseks, mis välistab vajaduse andmeallikale sagedaste päringute tegemiseks. Kuna kogud joonduvad nii andmeallika kui ka Power Apps tabelilise struktuuriga, pakuvad need tõhusat viisi andmetega suhtlemiseks isegi võrguühenduseta stsenaariumides.
// Clear the contents of EmployeeCollection, it already contains data
ClearCollect(
colEmployee,
{
Id: "1",
Name: "John",
Department: "IT"
},
{
Id: "2",
Name: "Nestor",
Department: "IT"
}
)
Eemaldage kasutamata muutujad ja meedia
Kuigi kasutamata meedia ja muutujad ei pruugi rakenduse jõudlust drastiliselt mõjutada, on oluline rakendus kasutamata meediast või muutujatest puhastada.
Kasutamata meediafailid suurendavad rakenduse üldist mahtu. See võib kaasa tuua aeglasema rakenduste laadimisaja.
Kasutamata muutujad suurendavad mälukasutust ja aeglustavad rakenduste initsialiseerimist veidi. Seda seetõttu, et nende muutujate jaoks eraldatakse ressursse, kuigi neid aktiivselt ei kasutata. Lisaks võib liiga palju kasutamata muutujaid rakenduse loogika üldist keerukust suurendada.
Kasutamata meedia ja muutujate ülevaatamiseks kasutage rakenduste kontrollijat.
Optimeeri ekraane ja juhtelemente
Vältige ristviitamist juhtelementidele
Juhtelemendid, mis viitavad teiste ekraanide juhtelementidele, võivad rakenduste laadimist ja navigeerimist aeglustada. Selle tegemine võib sundida rakendust laadima kohe teisi ekraane, selle asemel, et oodata, kuni kasutaja sellele ekraanile navigeerib. Selle probleemi lahendamiseks kasutage oleku jagamiseks ekraanide vahel muutujaid, kollektsioone ja navigeerimiskonteksti.
Power Apps Rakenduse kontrollija autorite stuudios kuvab ristviidetega juhtelemente. Selle probleemi lahendamiseks vaadake rakenduste kontrollijat regulaarselt üle.
Siin on näide ristviidetega juhtelementidest. Alloleval pildil on Galerii 1 juhtelementidele ristviited 2. ekraanil, sildi 2 juhtelemendil.
Kui viitate rakenduse esimesel ekraanil olevale juhtelemendile teisel ekraanil, siis jõudlust ei mõjuta, kuna esimene ekraan on juba laaditud ja see võib tegelikult olla hea asi, kuna rakendus on deklaratiivne muutujate kasutamise asemel.
Kui viitate veel laadimata juhtelementidele, näiteks esimesel ekraanil, mis viitab 3. ekraanilt pärit juhtelemendile nimega Label 3
, tuleb ekraan mällu laadida.
Luba tekstikontrollide jaoks DelayOutput
Viivituse väljundi säte Kui väärtuseks on seatud tõene, registreeritakse kasutaja sisend poole sekundilise viivituse järel. Kasulik kallite toimingute edasilükkamiseks, kuni kasutaja on teksti sisestamise lõpetanud, näiteks filtreerimiseks, kui sisendit kasutatakse teistes valemites.
Näiteks galerii puhul, mille üksusi filtreeritakse vastavalt TextInput-juhtelemendi sisestatule:
Kui DelayOutput on seatud väärtusele false, mis on vaikeväärtus, filtreeritakse galerii kohe, kui tekst on sisestatud. Kui teil on galerii, kus on palju elemente, aeglustab galerii kohe muudatustega uuesti laadimine jõudlust; kasulikum oleks veidi oodata. See on praktiline, kui kasutate otsingustringi jaoks funktsiooni TextInput (vt funktsiooni Search või uusi funktsioone StartsWith).
Kui DelayOutput on seatud väärtusele true, on enne muudatuste tuvastamist teine viivitus. Seda tehakse selleks, et anda teile aega soovitud teksti tippimiseks. Viivitus toimib hästi, kui seda kasutatakse TextInput.OnChange atribuudi abistamiseks. Kui teil on muudatustega seotud toimingud, ei soovi te neid käivitada enne, kui kõik soovitud andmed on väljale sisestatud.
Delegeerimine ja serveripoolne töötlemine
Delegeerimine
Delegeerimine Power Apps on kontseptsioon, mis viitab rakenduse võimele suunata teatud toimingud aluseks olevale andmeallikale, selle asemel, et neid toiminguid ise Power Apps töötleda. Delegeerimist kasutades Power Apps saavad arendajad luua tõhusamaid ja skaleeritavamaid rakendusi, mis toimivad hästi isegi suurte andmekogumitega seotud stsenaariumides. Oluline on olla teadlik konkreetsete andmeallikate ja toimingute delegeerimise piirangutest ning kujundada rakendused vastavalt optimaalse jõudluse saavutamiseks.
![MÄRKUS] Kõiki funktsioone ei saa delegeerida. Palun vaadake Delegeerimise mõistmine delegeerimise kohta lisateabe saamiseks.
Delegeerimisel on mitmeid eeliseid, näiteks päringute optimeerimine ja see lisab tuge suurtele andmekogumitele. Lisaks, kui lähteandmed sageli muutuvad, aitab delegeerimine andmeid ajakohasena hoida.
Vähendage API-kõnesid andmeallikale
Mõnikord võib olla mugav lihtsalt järgida kodeerimistavasid, näiteks luua kollektsioone lõuendirakenduses liitmiste abil. Vaadake allolevat koodi:
Selles näites on kaks tabelit: Juhid ja Veoautod. Arendaja kirjutab koodi, et luua juhtide ja veoautode andmete kogum, ning iga veoauto puhul helistab ta veoauto omanikele.
// Bad code
ClearCollect(vartruckdata, AddColumns('Truck Details',
"CITY",LookUp(Drivers, 'Truck Details'\[@'Dummy ID'\] = Drivers\[@'Truck Details'\],City),
"FIRSTNAME",LookUp(Drivers, 'Truck Details'\[@'Dummy ID'\] = Drivers\[@'Truck Details'\],'Driver First Name'),
"LASTNAME",LookUp(Drivers, 'Truck Details'\[@'Dummy ID'\] = Drivers\[@'Truck Details'\],'Driver Last Name'),
"STATE",LookUp(Drivers, 'Truck Details'\[@'Dummy ID'\] = Drivers\[@'Truck Details'\],State)));
Selliste liitmistoimingute tegemine lõuendirakenduses võib genereerida arvukalt andmeallikale suunatud päringuid, mis põhjustab väga aeglast laadimisaega.
Parem lähenemisviis on:
// Good code
Set(
varTruckData,
LookUp(
Drivers,
'Dummy ID' = ThisRecord.'Dummy ID',
'Driver First Name'
) & LookUp(
Drivers,
'Dummy ID' = ThisRecord.'Dummy ID',
'Driver Last Name'
)
);
Set(
varTruckData,
With(
{
vDriver: LookUp(
Drivers,
'Dummy ID' = ThisRecord.'Dummy ID'
)
},
vDriver.'Driver First Name' & vDriver.'Driver Last Name'
)
)
Reaalajas stsenaariumis on võimalik laadimisaega lühendada 5 minutilt alla 10 sekundi, parandades andmeid lihtsalt andmeallika tasandil.
Serveripoolne töötlemine
Erinevad andmeallikad, näiteks SQL ja Dataverse võimaldavad teil andmetöötlust, näiteks filtreerimist ja otsinguid, andmeallikale delegeerida. SQL Serveris saavad kasutajad luua vaateid, mille sisu on määratletud päringuga. Samamoodi ka koos Dataverse saavad kasutajad luua madala koodiga pluginaid, et kirjutada serveripoolse andmetöötluse loogikat ja saada lõpptulemused ainult lõuendirakendustes.
Andmetöötluse delegeerimine serverile võib parandada üldist jõudlust, vähendada kliendipoolset koodi ja on hõlpsasti hooldatav.
Lisateave pluginad sees Dataverse.
Päringu andmemustrite optimeerimine
Kasuta selgesõnalist veeruvalikut
Selgesõnalise veeruvaliku (ECS) funktsioon on kõigi uute rakenduste puhul vaikimisi lubatud. Kui see pole teie rakenduse jaoks lubatud, peaksite selle lubama. ECS vähendab automaatselt allalaaditavate veergude arvu ainult nendele, mida rakenduses kasutatakse. Kui ECS pole lubatud, võite hankida rohkem andmeid kui vaja, mis võib mõjutada jõudlust. Mõnikord, kui rakendus kogumike kaudu andmeid ammutab, võib veeru algne päritolu või allikas kaduma minna. Me ei tea, kas seda kasutatakse, ja me eemaldame selle ECS-i abil. Tavaliselt saab ECS-i puuduva veeru puhul tööle sundida, kasutades PowerFx-avaldist ShowColumns
kogumiviite järel või juhtelemendis.
Väldi kollektsiooni asustamiseks funktsiooni Power Automate kutsumist
Levinud tava on kogude toomiseks ja täitmiseks kasutada funktsiooni Power Automate Power Apps. Kuigi see lähenemisviis on õige, on olukordi, kus see ei pruugi olla kõige tõhusam valik. Kutsumine Power Automate kaasneb võrgu latentsuse lisakoormusega ja lisab 0,6-sekundilise jõudluskulu voo Power Automate eksemplari loomiseks.
Voogude ülekasutamine võib samuti kaasa tuua täitmispiiranguid ja kiiruse piiramist. Power Automate Seetõttu hinnake alati võrgu latentsuse ja jõudluskulude vahelist kompromissi.
N+1 probleemi kõrvaldamine
N+1 probleem on andmebaasipäringute puhul levinud probleem, kus kõigi vajalike andmete ühe päringuga hankimise asemel tehakse seotud andmete hankimiseks mitu lisapäringut. See võib kaasa tuua jõudlusprobleeme, kuna iga lisapäring tekitab lisakoormust.
Selline lihtne kollektsiooni laadimise kutse võib genereerida N+1 kutse andmeallikale.
ClearCollect(MyCollection, OrdersList,
{
LookUp(CustomersList,CustomerID = OrdersList[@CustomerID])
}
)
Lõuendirakenduste ja galeriide kontekstis võib N+1 probleem tekkida seotud kirjeid kuvavate andmeallikate ja galeriidega töötamisel. Probleem ilmneb tavaliselt siis, kui galeriis kuvatava iga üksuse kohta tehakse rohkem päringuid, mis põhjustab jõudlusprobleeme.
N+1 päringuprobleemi vältimiseks kasutage SQL Serveris View objekte või muutke kasutajaliidest, et vältida N+1 stsenaariumi käivitamist.
Dataverse hangib automaatselt seotud tabelite vajalikud andmed ja saate valida veerud seotud tabelitest.
ThisItem.Account.'Account Name'
Kui RelatedDataSourc
e` suurus on väike (<500 kirjet), saate selle vahemällu salvestada ja kasutada kogu otsingupäringu (N+1) stsenaariumi juhtimiseks.
Paki suuruse piiramine
Kuigi Power Apps see optimeerib rakenduste laadimist palju, saate astuda samme oma rakenduste jalajälje vähendamiseks. Väiksem jalajälg on eriti oluline vanemate seadmete kasutajatele või kasutajatele piirkondades, kus on suurem latentsus või väiksem ribalaius.
Hinnake oma rakendusse manustatud meediat. Kui midagi ei kasutata, kustuta see ära.
Manustatud pildid võivad olla liiga suured. PNG-failide asemel vaadake, kas saate kasutada SVG-pilte. Siiski tuleb SVG-piltidel teksti kasutamisel olla ettevaatlik, sest kasutatav font tuleb kliendile installida. Suurepärane lahendus teksti kuvamise vajaduse korral on pildi peale tekstisildi asetamine.
Hinnake, kas resolutsioon sobib vormiteguriga. Mobiilirakenduse eraldusvõime ei pea olema sama kõrge kui töölauarakenduse eraldusvõime. Katseta, et leida pildi kvaliteedi ja suuruse õige tasakaal.
Kui teil on kasutamata ekraane, kustutage need. Olge ettevaatlik ja ärge kustutage peidetud ekraane, mida kasutavad ainult rakenduste loojad või administraatorid.
Hinnake, kas proovite ühte rakendusse liiga palju töövooge mahutada. Näiteks, kas teil on samas rakenduses nii administraatori ekraanid kui ka kliendi ekraanid? Sellisel juhul kaaluge nende jagamist eraldi rakendusteks. See lähenemisviis lihtsustab ka mitme inimese samaaegset rakenduste kallal töötamist ning piirab "testimise ulatust", kui rakenduse muudatused nõuavad täielikku testi läbimist.
Optimeeri kõigile
Funktsiooni ForAll
sises Power Apps kasutatakse kirjete tabeli läbivaatamiseks ja igale kirjele valemi või valemite komplekti rakendamiseks. Kuigi funktsioon ise on mitmekülgne, võib selle vale kasutamine teie rakenduse jõudlust kiiresti vähendada.
Funktsioon ForAll on singulaarne järjestikune funktsioon samaaegse funktsiooni asemel. Seega vaatleb see korraga ainult ühte kirjet, saab tulemuse ja jätkab seejärel järgmisega, kuni on läbi käinud kõik oma ulatusse kuuluvad kirjed.
Väldi iga hinna eest ForAll’i pesastamist. See võib viia eksponentsiaalsete iteratsioonideni ja oluliselt mõjutada jõudlust.
ClearCollect(FollowUpMeetingAttendees.ForAll(ForAll(Distinct(AttendeesList.EmailAddress.Address).Lookup(Attendees))))
Andmebaasi partiivärskendused
ForAll + Patch võib olla üks lähenemisviis andmebaasi partiivärskenduste tegemiseks. Siiski olge ettevaatlik „For All” ja „Patch” järjekorra kasutamisel.
Järgmine funktsioon:
Patch(SampleFoodSalesData, ForAll(colSampleFoodSales,
{
demoName:"fromCanvas2"
})
);
Parema jõudlusega kui:
ForAll(colSampleFoodSales, Patch(SampleFoodSalesData,
{
demoName:"test"
})
);