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 vastavalt erinevatele ärivajadustele, on jõudluse optimaalsena hoidmine kriitilise tähtsusega. Andmetöötlus, kasutajaliidese disain ja rakenduse funktsionaalsus nõuavad koodi optimeerimisel hoolikat lähenemist.
Kui lõuendirakendused muutuvad keerukamaks, võib teil tekkida probleeme andmete toomise, valemite keerukuse ja renderdamiskiirusega. Tugeva funktsionaalsuse ja tundliku kasutajaliidese tasakaalustamine tähendab, et vajate süstemaatilist lähenemist koodi optimeerimisele.
Power Fx Valemite optimeerimine
Funktsiooniga
Funktsioon With hindab ühe kirje valemit. Valem saab arvutada väärtuse või teha toiminguid (nt andmete muutmine või ühendusega töötamine). Kasutage With keerukate valemite hõlpsamini loetavaks muutmiseks, jagades need väiksemateks nimega alamvalemiteks. Need nimetatud väärtused toimivad nagu lihtsad kohalikud muutujad, mis on piiratud ulatusega With. Kasutamine With on parem kui kontekst või globaalsed muutujad, kuna see on iseseisev, kergesti mõistetav ja töötab mis tahes deklaratiivse valemi kontekstis.
Lisateave funktsiooni kohta With .
Samaaegne funktsioon
Funktsioon Concurrent võimaldab sama atribuudi mitut valemit korraga hinnata, kui neil on konnektor või Dataverse kõned. Tavaliselt hinnatakse mitut valemit korraga, kui aheldate need ; tehtemärgiga (semikoolon). Rakendus Concurrent hindab kõiki atribuudi valemeid korraga, isegi pärast tehtemärgi kasutamist ; . See samaaegsus tähendab, et kasutajad ootavad tulemusi vähem. Kui andmekõned ei alga enne, kui eelmised kõned on lõppenud, ootab rakendus kõigi päringuaegade summat. Kui andmekõned algavad samal ajal, ootab rakendus ainult kõige kauem päringu aega.
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.
Coalesce on 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 tavalistest märkidest, eelmääratletud mustritest või regulaaravaldisest koosnevale mustrile.
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 mõistmine ja tõhus kasutamine OnStart 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. StartScreenOnStart Nimega valemile viitamine, mis omakorda viitab globaalsele muutujale, võib põhjustada võidujooksutingimuse, 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õidujooksutingimuse, 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
Authoring Studio kasutaja määratletud funktsioonid Power Apps võimaldavad kasutajatel luua oma kohandatud funktsiooni.
Selle funktsiooni kasutamiseks lülitage eelvaate seadetes sisse kasutaja määratletud funktsioon (UDF-id). Eelvaate funktsionaalsust ei tohiks tootmises kasutada, mistõttu on see vaikimisi keelatud, kuid muutub peagi üldiselt kättesaadavaks.
Määratlege valem App.Formulas järgmiselt:
FunctionName(Parameter1:DataType1, Parameter2:DataType2):OutputDataType = Formula
Kood toimib järgmiselt:
FunctionNamekasutatakse funktsiooni käivitamiseksParameteron sisendi nimi. Lubatud on üks või mitu sisenditDataTypeon funktsioon edastatud argument, peab vastama sellele andmetüübile. Saadaolevate andmetüüpide hulka kuuluvad kahendväärtus, värv, kuupäev, kuupäev, kellaaeg, dünaamiline, GUID, hüperlink, tekst ja kellaaegOutputDataTypeon andmetüüp, milles funktsiooni väljund onFormulaon 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
Muutujad määratlevad ja määravad kohalikud ja globaalsed väärtused, mida kasutate kogu rakenduses. Kuigi need on mugavad, võib liiga paljude muutujate kasutamine muuta teie rakenduse vähem tõhusaks.
Järgmine näide näitab, kuidas määrata objekti iga atribuudi jaoks muutuja, 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);
Tõhusam lähenemine on kasutada kinnisvara ainult siis, kui seda vajate:
Set(varEmployee, Office365Users.MyProfile())
"Welcome " & varEmployee.DisplayName
Kasutage kontekstimuutujaid ja globaalseid muutujaid targalt. Kui muutuja ulatus ulatub ühest ekraanist kaugemale, kasutage kontekstimuutujate asemel globaalseid muutujaid.
Liiga palju kasutamata muutujaid suurendab mälukasutust ja võib aeglustada rakenduse lähtestamist. Ressursse eraldatakse nende muutujate jaoks isegi siis, kui te neid ei kasuta. Kasutamata muutujad muudavad ka teie rakenduse loogika keerulisemaks. Kuigi mõju ei pruugi olla tõsine, on hea tava hoida oma Power App puhtana ja organiseerituna, et tagada parem jõudlus ja hõlpsam arendus.
Kollektsioonide optimeerimine
Kollektsioonid on ajutised andmesalvestusstruktuurid, mida kasutate andmete salvestamiseks ja nendega manipuleerimiseks rakenduses Power Apps . Kuid kollektsioonid võivad põhjustada jõudluse üldkulusid, kui kasutate neid liiga palju. Piirake kogude kasutamist ja kasutage neid ainult vajadusel.
// 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 CountIf selle asemel, et kasutada Count(Filter()).
Kollektsioonidega töötamisel arvestage järgmiste juhistega.
Piirake kollektsioonide suurust ja arvu. Kuna kollektsioonid on rakenduse jaoks kohalikud, talletatakse need mobiilsideseadme mällu. Mida rohkem andmekogusid mahutab või mida rohkem kogusid kasutate, seda halvem on jõudlus. Kasutage funktsiooni ShowColumns ainult konkreetsete veergude hankimiseks. Lisage funktsioon, Filter et saada ainult asjakohaseid andmeid.
Järgmine näidisfunktsioon tagastab kogu andmestiku.
ClearCollect(colDemoAccount, Accounts);
Võrrelge seda järgmise koodiga, mis tagastab ainult kindlad kirjed ja veerud.
ClearCollect(colAcc,
ShowColumns(
Filter(Accounts, !IsBlank('Address 1: City')),
"name","address1_city"))
See näide tagastab järgmise andmestiku.
Andmeallika värskendamise sageduse määramine. Kui lisate kogumikku uusi kirjeid, värskendage seda või koguge see, et tuua uued või muudetud kirjed. Kui teie andmeallikat värskendab mitu kasutajat, värskendage kogumit uute või muudetud kirjete hankimiseks. Rohkem värskenduskõnesid tähendab rohkem suhtlust serveriga.
Andmete vahemällu salvestamine kogumites ja muutujates
Kogum on tabelimuutuja, mis talletab andmeridu ja -veerge, mitte ainult ühte andmeüksust. Kollektsioonid on kasulikud kahel peamisel põhjusel: andmete koondamine enne andmeallikasse saatmist ja teabe vahemällu salvestamine sagedaste päringute vältimiseks. Kuna kogumid vastavad andmeallika tabelistruktuurile ja Power Apps võimaldavad teil andmetega tõhusalt suhelda isegi siis, kui olete ühenduseta.
// Clear the contents of EmployeeCollection, it already contains data
ClearCollect(
colEmployee,
{
Id: "1",
Name: "John",
Department: "IT"
},
{
Id: "2",
Name: "Nestor",
Department: "IT"
}
)
Kasutamata muutujate ja meediumite eemaldamine
Kuigi kasutamata meediumid ja muutujad ei pruugi rakenduse toimivust oluliselt mõjutada, on oluline oma rakendus puhastada, eemaldades kõik kasutamata meediumid või muutujad.
Kasutamata meediumifailid suurendavad rakenduse suurust, mis võib aeglustada rakenduse laadimisaega.
Kasutamata muutujad suurendavad mälukasutust ja võivad rakenduse lähtestamist veidi aeglustada. Ressursse eraldatakse nende muutujate jaoks isegi siis, kui neid ei kasutata. Liiga palju kasutamata muutujaid võib muuta ka rakenduse loogika keerulisemaks.
Kasutage rakendusekontrollijat kasutamata meediumide ja muutujate ülevaatamiseks.
Optimeerige ekraane ja juhtelemente
Ristviidete juhtelementide vältimine
Juhtelemendid, mis viitavad teiste ekraanide juhtelementidele, võivad aeglustada rakenduse laadimist ja navigeerimist. See võib sundida rakendust teisi ekraane kohe laadima, selle asemel, et oodata, kuni kasutaja sellele ekraanile läheb. Selle probleemi lahendamiseks kasutage selle asemel muutujaid, kogumeid ja navigeerimiskonteksti, et jagada olekut ekraanide vahel.
Rakendusekontrollija Power Apps Studio kuvab ristviidatud juhtelemendid. Selle probleemi lahendamiseks vaadake rakenduste kontrollija regulaarselt üle.
Siin on ristviidetega juhtelementide näide. Alloleval pildil on juhtelemendile Galerii 1 ristviide juhtelemendis Screen 2, Label 2.
Kui viitate teisel ekraanil rakenduse esimesel ekraanil olevale juhtelemendile, pole jõudluse tabamust, kuna esimene ekraan on juba laaditud. See võib tegelikult olla hea, sest rakendus on muutujate asemel deklaratiivne.
Kui viitate juhtelementidele, mida pole veel laaditud, näiteks esimene ekraan, mis viitab juhtelemendile, mille nimi on Label 3 ekraanilt 3, laadib rakendus selle ekraani mällu.
Luba teksti juhtelementide jaoks DelayOutput
Säte DelayOutput, kui see on seatud väärtusele tõene, registreerib kasutaja sisendi pärast poolesekundilist viivitust. See on kasulik kulukate toimingute edasilükkamiseks, kuni kasutaja on teksti sisestamise lõpetanud, näiteks filtreerimiseks, kui sisendit kasutatakse muudes valemites.
Näiteks galerii puhul, mille üksused on filtreeritud sõltuvalt sellest, mida kasutaja juhtelementi TextInput sisestab:
Kui DelayOutput väärtuseks on seatud väär, mis on vaikimisi, filtreeritakse galerii kohe, kui tekst on tippitud. Kui teil on galerii, kus on palju üksusi, aeglustab galerii kohe muudatustega uuesti laadimine jõudlust. Parem on natuke oodata. See on praktiline, kui kasutate otsingustringi jaoks funktsiooni TextInput (vt Otsing või uued funktsioonid StartsWith).
Kui DelayOutput väärtuseks on seatud tõene, on muudatuste tuvastamiseks lühike viivitus. See annab teile aega tippimise lõpetamiseks. Viivitus töötab hästi atribuudiga TextInput.OnChange. Kui teil on muudatustega seotud toiminguid, ei soovi te neid käivitada enne, kui olete väljale tippimise lõpetanud.
Delegeerimine ja serveripoolne töötlemine
Delegeerimine
Delegeerimine Power Apps on mõiste, mis viitab rakenduse võimele laadida teatud toimingud aluseks olevasse andmeallikasse, selle asemel, et töödelda toiminguid enda sees Power Apps . Delegeerimist Power Apps kasutades saavad arendajad luua tõhusamaid ja skaleeritavamaid rakendusi, mis toimivad hästi isegi suurte andmekogumitega stsenaariumide korral. Oluline on olla teadlik konkreetsete andmeallikate ja toimingute delegeerimispiirangutest ning kujundada rakendused vastavalt optimaalse jõudluse saavutamisele.
! [MÄRKUS] Kõik funktsioonid ei ole delegeeritavad. Delegeerimise kohta lisateabe saamiseks vaadake jaotist Delegeerimise mõistmine.
Delegeerimisel on mitmeid eeliseid, näiteks päringu optimeerimine ja see lisab tuge suurtele andmekogumitele. Lisaks, kui lähteandmed muutuvad sageli, aitab delegeerimine andmeid ajakohasena hoida.
Andmeallika API-kutsete vähendamine
Mõnikord võib kollektsioonide loomine tunduda mugav, tehes lõuendirakenduses ühendusi. Vaatame näidet.
Selles näites on kaks tabelit: Draiverid ja Veoautod. Kood loob juhtide ja veoki üksikasjade kogumi ning iga veoki puhul helistab see veoki omanikule.
// 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)));
Sellise ühendamise tegemine lõuendirakenduses võib tekitada andmeallikale palju kutseid, mis toob kaasa aeglase laadimisaja.
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 stsenaariumi korral saate laadimisaega vähendada viielt minutilt alla 10 sekundi, fikseerides andmed allikas.
Serveripoolne töötlemine
Erinevad andmeallikad (nt SQL) ja Dataverse võimaldavad teil delegeerida andmetöötluse (nt filtrid ja otsingud) andmeallikale. SQL Serveris saate luua päringuga määratletud vaateid. Aastal Dataverse saate luua vähese koodiga lisandmooduleid serveri andmete töötlemiseks ja ainult lõpptulemuste tagastamiseks oma lõuendirakendusse.
Andmetöötluse delegeerimine serverisse võib parandada jõudlust, vähendada kliendipoolset koodi ja muuta teie rakenduse hooldamise lihtsamaks.
Lisateavet pistikprogrammide kohta leiate aadressilt Dataverse.
Päringuandmete mustrite optimeerimine
Kasutage selgesõnalist veeruvalikut
Selgesõnalise veeruvaliku (ECS) funktsioon on kõigi uute rakenduste puhul vaikimisi sisse lülitatud. Kui see pole teie rakenduses sisse lülitatud, lülitage see sisse. ECS vähendab automaatselt toodud veergude arvu ainult rakenduses kasutatavateni. Kui ECS pole sisse lülitatud, võite saada rohkem andmeid, kui vajate, mis võib jõudlust mõjutada. Mõnikord, kui rakendus saab andmeid kogumite kaudu, võib veeru algne allikas kaotsi minna. ECS jätab veerud maha, kui ta ei saa aru, et neid kasutatakse. Kui soovite sundida ECS-i puuduvat veergu säilitama, kasutage PowerFx-i avaldist ShowColumns pärast kollektsiooni viidet või juhtelemendis.
Kollektsiooni asustamiseks helistamise Power Automate vältimine
Levinud tava on kasutada Power Automate kogude toomiseks ja asustamiseks Power Apps. Kuigi see lähenemisviis kehtib, on olukordi, kus see ei pruugi olla kõige tõhusam valik. Helistamisega Power Automate kaasneb võrgu latentsusaeg ja see lisab voo käivitamiseks Power Automate 0,6-sekundilise jõudluskulu.
Voogude liigne kasutamine Power Automate võib põhjustada ka täitmispiiranguid ja piiramist. Seetõttu hinnake alati kompromisse võrgu latentsuse ja jõudluskulude vahel.
Kõrvaldage N+1 probleem
N+1 probleem on tavaline probleem andmebaasipäringutes, kus kõigi vajalike andmete ühe päringuga toomise asemel tehakse seotud andmete toomiseks mitu lisapäringut. See võib põhjustada jõudlusprobleeme, kuna iga lisapäring toob kaasa üldkulusid.
Selline lihtne kõne kollektsiooni laadimiseks võib genereerida andmeallikale N+1 kutseid.
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 iga galeriis kuvatava üksuse kohta tehakse rohkem päringuid, mis põhjustab jõudluse kitsaskoha.
Kasutage SQL Serveri objektide kuvamist, et vältida N+1 päringuprobleemi, või muutke kasutajaliidest, et vältida N+1 stsenaariumi käivitamist.
Dataverse Toob automaatselt seotud tabelite vajalikud andmed ja saate veerud valida seotud tabelitest.
ThisItem.Account.'Account Name'
Kui RelatedDataSource’ suurus on väike (<500 kirjet), saate selle vahemällu salvestada kogumisse ja kasutada kogumit otsingu (N+1) päringustsenaariumi juhtimiseks.
Pakendi suuruse piiramine
Kuigi Power Apps see aitab rakenduste laadimist optimeerida, saate astuda samme oma rakenduste jalajälje vähendamiseks. Väiksem jalajälg on eriti oluline vanemate seadmete kasutajatele või kasutajatele, kes asuvad lokaatides, kus on suurem latentsus või väiksem läbilaskevõime.
Hinnake rakendusse manustatud meediume. Kui midagi ei kasutata, kustutage see.
Manustatud pildid võivad olla liiga suured. PNG-failide asemel vaadake, kas saate kasutada SVG-pilte. Siiski olge SVG-piltidel teksti kasutamisel ettevaatlik, sest kasutatav font tuleb klienti installida. Suurepärane lahendus, kui teil on vaja teksti kuvada, on tekstisildi asetamine pildi kohale.
Hinnake, kas eraldusvõime on vormiteguri jaoks sobiv. Mobiilirakenduse eraldusvõime ei pea olema nii kõrge kui töölauarakenduse eraldusvõime. Katsetage, et saavutada õige tasakaal pildikvaliteedi ja suuruse vahel.
Kui teil on kasutamata ekraane, kustutage need. Olge ettevaatlik, et te ei kustutaks peidetud ekraane, mida kasutavad ainult rakenduse tegijad või administraatorid.
Hinnake, kas proovite ühte rakendusse mahutada liiga palju töövooge. Näiteks kas teil on samas rakenduses nii administraatori kui ka kliendi ekraanid? Kui jah, kaaluge nende jagamist üksikuteks rakendusteks. See lähenemisviis hõlbustab ka mitme inimese samaaegset töötamist rakendustega ja piirab "plahvatusraadiust" (testimise hulka), kui rakenduse muudatused nõuavad täielikku testi läbimist.
Optimeeri kõigi jaoks
Funktsiooni ForAll in Power Apps kasutatakse kirjete tabeli itereerimiseks ja valemi või valemikomplekti rakendamiseks igale kirjele. Kuigi funktsioon ise on mitmekülgne, võib funktsiooni ForAll ebaõige kasutamine teie rakenduse jõudlust kiiresti vähendada.
Funktsioon ForAll on samaaegse funktsiooni asemel ainsuse järjestikune funktsioon. Seetõttu vaatab see korraga ainult ühte kirjet, saab tulemuse ja jätkab seejärel järgmisega, kuni on läbinud kõik oma ulatusse kuuluvad kirjed.
Vältige iga hinna eest pesitsemist. See võib põhjustada eksponentsiaalseid iteratsioone ja oluliselt mõjutada jõudlust.
ClearCollect(FollowUpMeetingAttendees.ForAll(ForAll(Distinct(AttendeesList.EmailAddress.Address).Lookup(Attendees))))
Andmebaasi pakettvärskendused
ForAll + Patch võib olla üks viis andmebaasi partiivärskendamiseks. Siiski olge ettevaatlik, kui kasutate järjekorda For All ja Patch.
Järgmine funktsioon:
Patch(SampleFoodSalesData, ForAll(colSampleFoodSales,
{
demoName:"fromCanvas2"
})
);
Toimib paremini kui:
ForAll(colSampleFoodSales, Patch(SampleFoodSalesData,
{
demoName:"test"
})
);