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õivad tekkida probleemid andmete leidmise, valemite keerukuse ja renderdamiskiirusega. Tugeva funktsionaalsuse ja reageeriva kasutajaliidese tasakaalustamiseks kasuta süstemaatilist lähenemist koodi optimeerimiseks.
Power Fx valemi optimeerimine
See osa annab parimaid praktikaid Power FX valemite optimeerimiseks.
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.
With on parem kui kontekst või globaalsed muutujad, sest see on iseseisev, lihtne mõista ja töötab igas deklaratiivse valemi kontekstis. Loe lähemalt With funktsiooni kohta.
Samaaegne funktsioon
Funktsioon Concurrent võimaldab samaaegselt hinnata mitut valemit samas omaduses, kui neil on ühendus- või Dataverse'i kutsed. 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 aega. 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. Loe lähemalt samaaegse funktsiooni kohta.
Concurrent(
ClearCollect(colAccounts1, Accounts),
ClearCollect(colUsers1, Users),
ClearCollect(colEnvDef1, 'Environment Variable Definitions'),
ClearCollect(colEnvVal1, 'Environment Variable Values')
);
Koalessemisfunktsioon
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. Loe lähemalt Coalesce'i funktsiooni kohta.
See näide nõuab value1 ja value2 hindamist kaks korda:
If(Not IsBlank(value1), value1, Not IsBlank(value2), value2)
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. Loe lähemalt IsMatch funktsiooni kohta.
Näiteks see valem vastab United States Social Security'i numbrile:
IsMatch(TextInput1.Text, "\d{3}-\d{2}-\d{4}")
Regulaaravaldise selgitus:
\\dVastab 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
Lõuendirakenduste OnStart omadus mängib olulist rolli tegevuste määratlemisel, mis toimuvad rakenduse käivitamisel. 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. Mõista ja kasuta seda OnStart vara tõhusalt, et luua reageerivaid ja tõhusaid lõuendirakendusi.
Lihtsusta App.OnStart funktsiooni, migreerides muutujate seadistusi nimetatud valemitele. Nimetatud valemid, eriti need, mis on rakenduse elutsükli alguses seadistatud, on kasulikud. Need valemid tegelevad muutujate lähtestamisega andmekutsete põhjal, pakkudes teie koodile puhtamat ja organiseeritumat struktuuri. Loe lähemalt artiklist Build large and keerukad lõuendirakendused.
Märkus.
See OnStart omadus on hädavajalik. See on järjestatud nimekiri töödest, mis tuleb enne esimese ekraani ilmumist ära teha. Kuna see on nii konkreetne mitte ainult selles, mida tuleb teha, vaid ka selles, millal töö tuleb teha vastavalt järjekorrale, piirab see ümberkorraldamist ja edasilükkamise optimeerimisi, mida muidu võiks teha.
Avakuva
Kui App.OnStart see sisaldab funktsioonikutset Navigate , siis isegi kui see on If funktsioonis ja harva kutsutakse, peab rakendus lõpetama käivitamise App.OnStart enne, kui näitab rakenduse esimest ekraani.
App.StartScreen on deklaratiivne viis näidata, millist ekraani tuleks esimesena näidata, ja see ei blokeeri optimeerimisi.
Atribuudi StartScreen määramine näitab esimest ekraani enne App.OnStart lõpuleviimist.
App.StartScreen määrab, millist ekraaniobjekti esimesena näidata, ilma eeltöötluseta.
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)
Lisainfo: App.StartScreen: deklaratiivne alternatiiv App.OnStart navigeerimisele.
Hoiatus
Vältige sõltuvusi ja vahel. StartScreenOnStart Nimetatud valemi viitamine, mis omakorda viitab globaalsele muutujale, võib põhjustada võistlustingimuse, mille StartScreen puhul seda ei rakendata õigesti.
Ära loo sõltuvusi ja StartScreenvaheleOnStart. Kuigi rakendus blokeerib globaalsete muutujate viitamise hulgas StartScreen, saad viidata nimetatud valemile, mis omakorda viitab globaalsele muutujale. Selline lähenemine võib põhjustada võistlusolukorra, kus seda StartScreen ei rakendata õigesti.
Nimega valemid
Nimetatud valemid on staatilised või konstandid, mida saab defineerida .App.Formulas Kui need on sisse App.Formulaskuulutatud, saab neid kasutada ükskõik kus rakenduses ning nende väärtused püsivad alati ajakohased. Power Apps'i nimetatud valemid võimaldavad teil määratleda väärtusi või väärtuste komplekte, mida platvorm automaatselt haldab ja uuendab. See funktsionaalsus nihutab väärtuse arvutamise ja hoolduse vastutuse arendajalt Power Apps'ile, lihtsustades arendusprotsessi. Power Apps'i nimetatud valemid on võimas funktsioon, mis võib oluliselt parandada rakenduse jõudlust ja hooldatavust.
Nimetatud valemid aitavad samuti rakenduse teemade määratlemisel. Kui ehitad ettevõtterakendusi, soovid sageli, et rakendusel oleksid ühised teemad, mis tagavad ühtse välimuse ja kasutajakogemuse. Teema loomiseks tuleb deklareerida kümneid kuni sadu muutujaid .App.OnStart See deklaratsioon pikendab koodi pikkust ja rakenduse inisialiseerimise aega.
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 saate järgmise koodi App.OnStart liigutada punktile App.Formulas, mis vähendab 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 liigutada järgmiselt App.Formulas :
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 seadistuses Lookups. Siin on vaja muudatust Lookup valemis, et saada kasutaja info Office 365-st Dataverse'i asemel. Sa pead muudatuse tegema ainult ühes kohas, ilma et koodi igal pool muudaks.
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 ulatub ka Dataverse Users tabelilt Office 365 ühendusele üleminekuni ilma rakenduses laiali olevate valemite muutmiseta.
Teine lähenemisviis on optimeerimine countRows.
varListItems = CountRows(SampleList)
Selle Set funktsiooni puhul tuleb muutuja varListItems initsialiseerida näidisnimekirja algse ridade arvuga ja seadistada see uuesti pärast nimekirja elementide lisamist või eemaldamist. Nimetatud valemite puhul uuendatakse muutujat automaatselt, kui andmed muutuvad varListItems .
Kinnisvara nimelised valemid App.Formulas pakuvad paindlikumat ja deklaratiivsemat lähenemist väärtuste ja arvutuste haldamiseks kogu rakenduses. Need pakuvad eeliseid ajastuse sõltumatuse, automaatsete uuenduste, hooldatavuse ja muutumatute definitsioonide osas võrreldes ainult App.OnStart.
| Aspekt | Nimetatud valemid (App.Formulas) | App.OnStart |
|---|---|---|
| Ajastuse iseseisvus | Valemid on koheselt kättesaadavad ja neid saab arvutada suvalises järjekorras. | Muutujad võivad tekitada ajastuse sõltuvusi, mis mõjutavad saadavust. |
| Automaatsed uuendused | Valemid värskendatakse sõltuvuste muutumisel automaatselt. | Muutujad seatakse käivitamisel korra; Võib-olla on vaja käsitsi uuendusi. |
| Hallatavus | Tsentraliseeritud valemid ühes kohas parandavad hooldatavust. | Hajutatud muutujad võivad vajada leidmist ja uuendamist mitmes kohas. |
| Muutumatud definitsioonid | Valemidefinitsioonid on muutumatud App.Formulas . |
Muutuvad väärtused võivad olla juhuslikele muutustele vastuvõtlikud. |
Kasutaja määratletud funktsioonid
kasutaja määratud funktsioonid Power Apps Studio võimaldavad luua oma kohandatud funktsioone.
Määratlege valem App.Formulas järgmiselt:
FunctionName(Parameter1:DataType1, Parameter2:DataType2):OutputDataType = Formula
Kood toimib järgmiselt:
FunctionNamekutsub funktsiooni esile.Parameteron sisendi nimi. Sa võid lisada ühe või mitu sisendit.DataTypeon andmetüüp, millele funktsiooni edastatud argument peab vastama. Saadaval olevad andmetüübid on Boolean, Color, Date, Datetime, Dynamic, GUID, Hyperlink, Text ja Time.OutputDataTypeon funktsiooni väljundi andmetüüp.Formulaon funktsiooni väljund.
Kasutatakse IfError veahalduse rakendamiseks defineeritud funktsiooni sees:
// Function to calculate the area of a circle based on the radius
calcAreaOfCircle(radius: Number): Number =
IfError(Pi() * radius * radius, 0);
Kutsu defineeritud funktsioon tekstist või sildist juhtnuppu.
calcAreaOfCircle(Int(*TextInput1*.Text))
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. Hoia oma Power App puhtana ja organiseerituna parema jõudluse ja lihtsama arenduse tagamiseks.
Kollektsioonide optimeerimine
Kogud on ajutised andmestorage struktuurid, mida kasutatakse andmete salvestamiseks ja töötlemiseks Power Apps rakenduses. Siiski võib kogumine põhjustada jõudluse koormust. 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()).
Arvesta selle lähenemisega, kui töötad kollektsioonidega:
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
ShowColumnsainult konkreetsete veergude hankimiseks. Lisage funktsioon,Filteret saada ainult asjakohaseid andmeid.Järgmine näidisfunktsioon tagastab kogu andmestiku:
ClearCollect(colDemoAccount, Accounts);Võrdle seda funktsiooni järgmise koodiga, mis tagastab ainult konkreetseid kirjeid ja veerge:
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 kogud vastavad andmeallika ja Power Apps'i tabelikujulisele struktuurile, võimaldavad need sul andmetega tõhusalt suhelda isegi siis, kui oled võrguü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 meedia ja muutujad ei pruugi rakenduse jõudlust oluliselt mõjutada, on oluline oma rakendust puhastada, eemaldades kasutamata meedia 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
Power Apps'i ekraanide ja juhtimisseadmete optimeerimiseks kaaluge järgmisi parimaid praktikaid.
Ristviidete juhtelementide vältimine
Juhtelemendid, mis viitavad teiste ekraanide juhtelementidele, võivad aeglustada rakenduse laadimist ja navigeerimist. See lähenemine võib sundida rakendust laadima teisi ekraane, selle asemel et oodata, kuni kasutaja sellele ekraanile läheb. Selle probleemi lahendamiseks kasutage muutujaid, kogumikke ja navigeerimiskonteksti, et jagada olekut ekraanide vahel.
Power Apps Studio rakenduse kontrollija näitab juhtnuppe, mis on ristviitatud. Selle probleemi lahendamiseks vaadake rakenduste kontrollija regulaarselt üle.
Järgmisel pildil on Galerii 1 juhtnupp ristviidatud ekraanil 2, silt 2 juhtimisel.
Kui viitad esimesele ekraanile rakenduses teisel ekraanil, siis jõudluse langust ei ole, sest esimene ekraan on juba laetud. See käitumine on tegelikult kasulik, sest rakendus on deklaratiivne, mitte ei kasuta muutujaid.
Kui viitad juhtnuppudele, mis pole veel laaditud, näiteks esimene ekraan, mis viitab ekraanilt 3 nimetatud juhtnuppudele Label 3 , laadib rakendus selle ekraani mällu.
Luba teksti juhtelementide jaoks DelayOutput
DelayOutput seadistus, kui seatud tõele, registreerib kasutaja sisendi pärast poole sekundi viivitust. See viivitus on kasulik kallite operatsioonide edasilükkamiseks, kuni kasutaja lõpetab teksti sisestamise, näiteks filtreerimisel, kui sisendit kasutatakse teistes valemites.
Näiteks võtame galerii, mille esemed filtreeritakse sõltuvalt sellest, mida kasutaja sisestab TextInput kontrolli:
Kui seadistad DelayOutputi false'iks, mis on vaikimisi, filtreerib galerii kohe, kui tekst on kirjutatud. Kui sul on galerii, kus on palju esemeid, aeglustab galerii kohe muudatustega laadimine jõudlust. Parem on oodata. See käitumine on praktiline, kui kasutad
TextInputotsingustringi või funktsiooniStartsWithjaoks.Kui seadistad DelayOutput tõele, tekib lühike viivitus enne muudatuste tuvastamist. See viivitus annab aega trükkimise lõpetamiseks. Viivitus sobib kinnisvaraga
TextInput.OnChangehästi. Kui sul on muudatustega seotud tegevusi, ei taha sa, et need käivituksid enne, kui oled välja kirjutamise lõpetanud.
Delegeerimine ja serveripoolne töötlemine
Delegeerimise ja serveripoolse töötlemise kasutamine võimaldab teie rakendusel tõhusalt hallata suuri andmekogumeid, kandes toimingud andmeallikale.
Delegeerimine
Delegeerimine Power Apps'is tähendab rakenduse võimet laadida teatud toimingud aluseks olevale andmeallikale, mitte töödelda neid Power Apps'i sees. Power Apps'i delegeerimist kasutades saate luua tõhusamaid ja skaleeritavamaid rakendusi, mis toimivad hästi isegi suurte andmekogumite olukordades. Ole teadlik delegeerimise piirangutest konkreetsete andmeallikate ja operatsioonide puhul ning kujunda oma rakendus vastavalt optimaalse jõudluse saavutamiseks.
Märkus.
Kõik funktsioonid ei ole delegeeritavad. Lisateavet delegeerimise kohta leiate jaotisest Päringu piirangud: Delegeerimine ja päringu piirangud.
Delegeerimisel on mitmeid eeliseid, näiteks päringute optimeerimine ja suurte andmekogumite tugi. 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. Vaadake järgmist näidet. Näites on kaks tabelit: juhid 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 saad 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 Server'is saab luua vaateid, mis on määratletud päringuga. 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
Rakenduse andmete päringute optimeerimine võib oluliselt vähendada laadimisaegu ja parandada üldist reageerimisvõimet.
Kasutage selgesõnalist veeruvalikut
Selgesõnalise veeruvaliku (ECS) funktsioon on kõigi uute rakenduste puhul vaikimisi sisse lülitatud. Kui see pole sinu rakenduses sisse lülitatud, lülita 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 viskab veerud maha, kui ta ei suuda kindlaks teha, kas neid kasutatakse. Et sundida ECS-i jätma puuduvat veergu, kasuta Power Fx avaldist ShowColumns pärast kogumisviite või juhtnuppu.
Väldi Power Automate'i kutsumist kogu täitmiseks
Levinud praktika on kasutada Power Automate'i, et tuua ja täita kollektsioone Power Apps'is. Kuigi see lähenemisviis kehtib, on olukordi, kus see ei pruugi olla kõige tõhusam valik. Power Automate'i kutsumine lisab võrgu latentsuse ja 0,6-sekundilise jõudluskulu, et käivitada Power Automate'i voog.
Power Automate'i voogude liigne kasutamine võib samuti põhjustada täitmise piiranguid ja piiramist. Alati hinda võrgu latentsuse ja jõudluskulude kompromisse.
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 probleem võib põhjustada jõudlusprobleeme, kuna iga lisapäring tekitab lisakoormust.
Lihtne kutse nagu see kogumiku laadimiseks võib genereerida N+1 kõnesid andmeallikale:
ClearCollect(MyCollection, OrdersList,
{
LookUp(CustomersList,CustomerID = OrdersList[@CustomerID])
}
)
Lõuendirakenduste ja galeriide kontekstis võib N+1 probleem tekkida andmeallikate ja galeriidega, mis kuvavad seotud kirjeid. Probleem ilmneb tavaliselt siis, kui iga galeriis kuvatava üksuse kohta tehakse rohkem päringuid, mis põhjustab jõudluse kitsaskoha.
Kasuta SQL Server'is View objekte, et vältida N+1 päringuprobleemi, või muuda 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 (alla 500 kirje), salvesta see vahemällu kogumisse ja kasuta kogu Lookup (N+1) päringu stsenaariumi käivitamiseks.
Piira pakendi suurust
Kuigi Power Apps optimeerib rakenduste laadimist, saate astuda samme, et vähendada oma rakenduste jalajälge. Väiksem jalajälg on eriti oluline vanemate seadmete kasutajatele või piirkondades, kus latentsus või ribalaius on väiksem.
Hinda oma rakendusse sisse ehitatud meediat. Kui midagi ei kasutata, kustutage see.
Näiteks võivad manustatud pildid olla liiga suured. PNG-failide asemel vaadake, kas saate kasutada SVG-pilte. Ole SVG piltides teksti kasutamisel ettevaatlik, sest font peab olema kliendis paigaldatud. Üks lahendus, kui vajad teksti kuvamist, on pildi peale peale asetada tekstisilt.
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ähenemine teeb ka mitme inimese samaaegse rakenduste kallal töötamise lihtsamaks ning piirab "plahvatusraadiust" (testimise hulka), kui rakenduse muudatused nõuavad täielikku testimist.
Optimeeri kõigi jaoks
ForAll funktsiooni Power Apps kasutatakse kirjete tabeli iteratsiooniks ja iga kirje jaoks valemi või valemite komplekti rakendamiseks. Kuigi funktsioon ise on mitmekülgne, võib selle vale kasutamine ForAll kiiresti muuta rakenduse vähem jõudluseks.
Funktsioon ForAll on singulaarne järjestikune funktsioon, mitte samaaegne funktsioon. Seetõttu vaatab see korraga ainult ühte kirjet, saab tulemuse ja jätkab järgmise kirjega, kuni läbib kõik oma ulatuses olevad kirjed.
Väldi pesitsemist ForAll. See praktika võib viia eksponentsiaalsete iteratsioonideni ja oluliselt mõjutada jõudlust.
ClearCollect(FollowUpMeetingAttendees.ForAll(ForAll(Distinct(AttendeesList.EmailAddress.Address).Lookup(Attendees))))
Andmebaasi partiiuuendus
Sa saad kasutada ForAll ja Patch et andmebaasi partiiuuendada. Ole siiski ettevaatlik, kui kasutad järjekorda ForAll ja Patch.
Järgmine funktsioon on parem lähenemine, näiteks:
Patch(SampleFoodSalesData, ForAll(colSampleFoodSales,
{
demoName:"fromCanvas2"
})
);
Järgmine lähenemine on vähem tõhus:
ForAll(colSampleFoodSales, Patch(SampleFoodSalesData,
{
demoName:"test"
})
);