opomba,
Dostop do te strani zahteva pooblastilo. Poskusite se vpisati alispremeniti imenike.
Dostop do te strani zahteva pooblastilo. Poskusite lahko spremeniti imenike.
Ker se aplikacije platna razvijajo, da bi zadovoljile različne poslovne potrebe, je ohranjanje optimalne zmogljivosti ključnega pomena. Obdelava podatkov, oblikovanje uporabniškega vmesnika in funkcionalnost aplikacije zahtevajo skrben pristop k optimizaciji kode.
Ko postanejo canvas aplikacije vse bolj kompleksne, se lahko pojavijo težave z iskanjem podatkov, kompleksnostjo formul in hitrostjo upodabljanja. Za uravnoteženje močne funkcionalnosti z odzivnim uporabniškim vmesnikom uporabite sistematičen pristop k optimizaciji kode.
Optimizacija formul Power Fx
Ta razdelek ponuja najboljše prakse za optimizacijo Power Fx formul.
S funkcijo
Funkcija ovrednoti formulo za en sam zapis. With Formula lahko izračuna vrednost ali izvede dejanja, kot je spreminjanje podatkov ali delo s povezavo. Za lažje branje kompleksnih formul uporabite With razdelitev na manjše poimenovane podformule. Te poimenovane vrednosti delujejo kot preproste lokalne spremenljivke, omejene na obseg With.
With je boljša od konteksta ali globalnih spremenljivk, ker je samostojna, enostavna za razumevanje in deluje v vsakem deklarativnem formulačnem kontekstu. Izvedite več o funkciji With.
Sočasna funkcija
Funkcija Concurrent omogoča hkratno vrednotenje več formul v isti lastnosti, če imajo povezane ali Dataverse klice. Običajno se več formul ovrednoti hkrati, ko jih povežete z operatorjem ; (podpičje). Z operatorjem Concurrent aplikacija hkrati ovrednoti vse formule v lastnosti, tudi po uporabi operatorja ; . Ta sočasnost pomeni, da uporabniki čakajo manj časa na rezultate. Ko se podatkovni klici ne začnejo, dokler se prejšnji klici ne končajo, aplikacija počaka na vsoto vseh časov zahtev. Če se podatkovni klici začnejo hkrati, aplikacija čaka le na najdaljši čas zahteve. Izvedite več o funkciji sočasnosti.
Concurrent(
ClearCollect(colAccounts1, Accounts),
ClearCollect(colUsers1, Users),
ClearCollect(colEnvDef1, 'Environment Variable Definitions'),
ClearCollect(colEnvVal1, 'Environment Variable Values')
);
Funkcija združitve
Funkcija Coalesce ovrednoti svoje argumente po vrstnem redu in vrne prvo vrednost, ki ni prazna ali prazen niz. S to funkcijo lahko zamenjate prazno vrednost ali prazen niz z drugo vrednostjo, vendar neprazne in neprazne vrednosti nizov pustite nespremenjene. Če so vsi argumenti prazni ali prazni nizi, funkcija vrne prazno vrednost.
Coalesce je dober način za pretvorbo praznih nizov v prazne vrednosti. Izvedite več o funkciji Coalesce.
Ta primer zahteva value1 in value2 mora biti ocenjen dvakrat:
If(Not IsBlank(value1), value1, Not IsBlank(value2), value2)
To funkcijo je mogoče zreducirati na:
Coalesce(value1, value2)
Funkcija IsMatch
Funkcija preveri, ali se besedilni niz ujema z vzorcem, sestavljenim iz navadnih znakov, vnaprej določenih vzorcev ali regularnega izraza. IsMatch Izvedite več o funkciji IsMatch.
Na primer, ta formula ustreza številki socialnega zavarovanja United States:
IsMatch(TextInput1.Text, "\d{3}-\d{2}-\d{4}")
Razlaga regularnega izraza:
\\dUjema se s katero koli števko (0–9).{3}Določa, da se mora prejšnji vzorec števk (\d) pojaviti natanko trikrat.-Ujema se z znakom vezaja.{2}Določa, da se mora prejšnji vzorec števk (\d) pojaviti natanko dvakrat.{4}Določa, da se mora prejšnji vzorec števk (\d) pojaviti natanko štirikrat.
Več primerov IsMatch:
IsMatch(TextInput1.Text, "Hello World")
IsMatch(TextInput1\_2.Text, "(?!^\[0-9\]\\\*$)(?!^\[a-zA-Z\]\\\*$)(\[a-zA-Z0-9\]{8,10})")
Optimiziraj aplikacijo OnStart
Lastnost OnStart canvas aplikacij igra ključno vlogo pri določanju dejanj, ki se zgodijo ob zagonu aplikacije. Ta lastnost omogoča razvijalcem aplikacij izvajanje globalnih inicializacijskih nalog, nastavitev spremenljivk in izvajanje dejanj, ki bi se morala zgoditi le enkrat med postopkom zagona aplikacije. Razumite in učinkovito OnStart uporabljajte lastnost za ustvarjanje odzivnih in učinkovitih canvas aplikacij.
Funkcijo App.OnStart poenostavite z migracijo nastavitev spremenljivk na poimenovane formule. Poimenovane formule, zlasti tiste, konfigurirane zgodaj v življenjskem ciklu aplikacije, so prednostne. Te formule obravnavajo inicializacijo spremenljivk na podlagi podatkovnih klicev, kar zagotavlja čistejšo in bolj organizirano strukturo vaše kode. Več izveste v Zgradite velike in kompleksne aplikacije za platno.
opomba,
Lastnina OnStart je nujna. To je urejen seznam dela, ki ga je treba opraviti, preden se prikaže prvi zaslon. Ker je tako specifičen ne le glede tega, kaj je treba narediti, ampak tudi, kdaj je treba delo opraviti glede na naročilo, omejuje preurejanje in odlašanje optimizacij, ki bi sicer lahko bile opravljene.
Začetni zaslon
Če App.OnStart vsebuje Navigate klic funkcije, tudi če je v funkciji If in redko klican, mora aplikacija dokončati izvedbo App.OnStart , preden prikaže prvi zaslon aplikacije.
App.StartScreen je deklarativen način za označevanje, kateri zaslon naj se prikaže prvi, in ne blokira optimizacij.
Z nastavitvijo lastnosti StartScreen se prikaže prvi zaslon, preden je App.OnStart dokončano.
App.StartScreen določi, kateri zaslonski objekt se prikaže prvi, brez potrebe po predhodni obdelavi.
Namesto pisanja kode, kot je ta:
App.OnStart = Collect(OrdersCache, Orders);
If(Param("AdminMode") = "1", Navigate(AdminScreen), Navigate(HomeScreen))
Spremeni kodo v:
App.OnStart = Collect(OrdersCache, Orders);
App.StartScreen = If(Param("AdminMode") = "1", AdminScreen, HomeScreen)
Več informacij: App.StartScreen: deklarativna alternativa navigaciji v App.OnStart.
Opozorilo
Izogibajte se odvisnostim med StartScreen in OnStart. Sklicevanje na poimenovano formulo, ki nato referira na globalno spremenljivko, lahko povzroči tekmovalni pogoj, ki ni pravilno uporabljen.StartScreen
Ne ustvarjajte odvisnosti med StartScreen in OnStart. Medtem ko aplikacija blokira sklicevanje na globalne spremenljivke v StartScreen, lahko sklicujete na poimenovano formulo, ki nato referira na globalno spremenljivko. Ta pristop lahko povzroči tekmovalno stanje, v katerem ni pravilno uporabljen.StartScreen
Poimenovane formule
Poimenovane formule so statične ali konstante, ki jih lahko definiramo v .App.Formulas Ko so enkrat deklarirane v App.Formulas, jih je mogoče uporabiti kjerkoli v aplikaciji, njihove vrednosti pa so vedno posodobljene. Poimenovane formule v Power Apps vam omogočajo, da določite vrednosti ali nabore vrednosti, ki jih platforma samodejno upravlja in posodablja. Ta funkcionalnost prenese odgovornost za izračun vrednosti in vzdrževanje z razvijalca na Power Apps, kar poenostavi razvojni proces. Poimenovane formule v Power Apps so zmogljiva funkcija, ki lahko bistveno izboljša zmogljivost in vzdržljivost aplikacij.
Poimenovane formule prav tako pomagajo pri deklariranju tem aplikacij. Ko gradite poslovne aplikacije, pogosto želite, da ima aplikacija skupne teme, ki zagotavljajo dosleden videz in uporabniško izkušnjo. Za ustvarjanje teme morate deklarirati desetine do stotine spremenljivk v App.OnStart. Ta deklaracija poveča dolžino kode in čas inicializacije aplikacije.
Sodobni kontrolniki lahko bistveno pomagajo tudi pri temiranju in zmanjšajo količino napisane logike s strani strank za upravljanje tem. Sodobni kontrolniki so trenutno v predogledni različici.
Na primer, lahko premaknete naslednjo kodo na App.OnStartApp.Formulas, kar zmanjša čas zagona globalnih deklaracij spremenljivk.
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");
Kodo lahko premaknete na App.Formulas naslednji način:
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";
Drug primer je v postavitvi Lookups. Tukaj je potrebna sprememba v formuli Lookup, da se uporabniške informacije pridobijo iz Office 365 namesto iz Dataverse. Spremembo morate narediti le na enem mestu, brez spreminjanja kode povsod.
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');
Te formule utelešajo bistvo izračuna. Opisujejo postopek za določanje UserEmail, UserInfo, UserTitle in UserPhone na podlagi drugih vrednosti. Ta logika je enkapsulirana, kar omogoča široko uporabo v celotni aplikaciji, in jo je mogoče spreminjati na enem mestu. Prilagodljivost se razteza tudi na preklapljanje iz tabele uporabnikov Dataverse na priključek Office 365, ne da bi bilo treba spreminjati formule, razpršene po aplikaciji.
Drug pristop je optimizacija countRows.
varListItems = CountRows(SampleList)
S funkcijo Set morate spremenljivko varListItems inicializirati z začetnim številom vrstic v vzorčnem seznamu in jo ponovno nastaviti po dodajanju ali odstranjevanju elementov seznama. Pri poimenovanih formulah se varListItems spremenljivka, ko se podatki spreminjajo, samodejno posodablja.
Poimenovane formule v App.Formulas lastnosti omogočajo bolj prilagodljiv in deklarativen pristop k upravljanju vrednosti in izračunov skozi celotno aplikacijo. Ponujajo prednosti glede časovne neodvisnosti, samodejnih posodobitev, vzdržljivosti in nespremenljivih definicij v primerjavi z zanašanjem zgolj na App.OnStart.
| Vidik | Poimenovane formule (App.Formulas) | App.OnStart |
|---|---|---|
| Časovna neodvisnost | Formule so na voljo takoj in jih je mogoče izračunati v poljubnem vrstnem redu. | Spremenljivke lahko uvedejo časovne odvisnosti, ki vplivajo na razpoložljivost. |
| Samodejne posodobitve | Formule se samodejno posodobijo, ko se odvisnosti spremenijo. | Spremenljivke se nastavijo enkrat med zagonom; Morda bodo potrebne ročne posodobitve. |
| Vzdrževanje | Centralizirane formule na enem mestu izboljšujejo vzdrževanje. | Razpršene spremenljivke je morda treba najti in posodabljati na več mestih. |
| Nespremenljive definicije | Definicije formul v so App.Formulas nespremenljive. |
Vrednosti spremenljivk so lahko dovzetne za nenamerne spremembe. |
Uporabniško definirane funkcije
uporabniško definirane funkcije v Power Apps Studiu omogočajo ustvarjanje lastnih lastnih funkcij.
Definirajte formulo pod App.Formulas na naslednji način:
FunctionName(Parameter1:DataType1, Parameter2:DataType2):OutputDataType = Formula
Koda deluje takole:
FunctionNamekliče funkcijo.Parameterje ime vhoda. Lahko vključite enega ali več vhodov.DataTypeje podatkovni tip, s katerim mora biti argument, vnesen v funkcijo, ujemajoč. Razpoložljivi podatkovni tipi vključujejo Boolean, Color, Date, Datetime, Dynamic, GUID, Hyperlink, Text in Time.OutputDataTypeje podatkovni tip za izhod funkcije.Formulaje izhod funkcije.
Uporaba IfError za implementacijo obravnave napak znotraj definirane funkcije:
// Function to calculate the area of a circle based on the radius
calcAreaOfCircle(radius: Number): Number =
IfError(Pi() * radius * radius, 0);
Pokličite definirano funkcijo iz besedilnega ali označevalnega nadzora.
calcAreaOfCircle(Int(*TextInput1*.Text))
Optimizirajte spremenljivke
Spremenljivke definirajo in nastavijo lokalne in globalne vrednosti, ki jih uporabljate v celotni aplikaciji. Čeprav so priročne, lahko uporaba preveč spremenljivk zmanjša učinkovitost vaše aplikacije.
Naslednji primer prikazuje, kako nastaviti spremenljivko za vsak atribut objekta, kar zahteva uporabo Set za vsako nepremičnino.
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);
Učinkovitejši pristop je, da nepremičnino uporabljate le, ko jo potrebujete:
Set(varEmployee, Office365Users.MyProfile())
"Welcome " & varEmployee.DisplayName
Spremenljivke konteksta in globalne spremenljivke uporabljajte pametno. Če obseg spremenljivke presega en sam zaslon, uporabite globalne spremenljivke namesto kontekstnih spremenljivk.
Preveč neuporabljenih spremenljivk poveča porabo pomnilnika in lahko upočasni inicializacijo aplikacije. Za te spremenljivke so dodeljeni viri, tudi če jih ne uporabljate. Neuporabljene spremenljivke prav tako povečajo kompleksnost logike vaše aplikacije. Ohranjajte svojo Power App čisto in organizirano za boljšo zmogljivost in lažji razvoj.
Optimizirajte zbirke
Zbirke so začasne strukture za storage podatkov, ki jih uporabljate za shranjevanje in obdelavo podatkov v aplikaciji Power Apps. Vendar pa lahko pobiranje povzroči dodatne stroške zmogljivosti. Omejite uporabo zbirk in jih uporabljajte le, kadar je to nujno potrebno.
// Use this pattern
ClearCollect(colErrors, {Text: gblErrorText, Code: gblErrorCode});
// Do not use this pattern
Clear(colErrors);
Collect(colErrors, {Text: gblErrorText, Code: gblErrorCode});
Za štetje zapisov v lokalni zbirki uporabite CountIf namesto Count(Filter()).
Pri delu z zbirkami upoštevajte ta pristop:
Omejite velikost in število zbirk. Ker so zbirke lokalne za aplikacijo, so shranjene v pomnilniku mobilne naprave. Več zbirk podatkov kot je shranjenih ali več zbirk kot jih uporabljate, slabša je zmogljivost. Za pridobitev samo določenih stolpcev uporabite funkcijo
ShowColumns. Dodajte funkcijo, da dobite samo ustrezne podatke.FilterNaslednja primer funkcije vrne celoten nabor podatkov:
ClearCollect(colDemoAccount, Accounts);To funkcijo primerjajte z naslednjo kodo, ki vrača le določene zapise in stolpce:
ClearCollect(colAcc, ShowColumns( Filter(Accounts, !IsBlank('Address 1: City')), "name","address1_city"))Ta primer vrne naslednji nabor podatkov:
Nastavite pogostost osveževanja vira podatkov. Če v zbirko dodate nove zapise, jo osvežite ali vanjo zberite podatke, da dobite nove ali spremenjene zapise. Če več uporabnikov posodobi vaš vir podatkov, osvežite zbirko, da dobite nove ali spremenjene zapise. Več klicev za osvežitev pomeni več interakcije s strežnikom.
Predpomnilnik podatkov v zbirkah in spremenljivkah
Zbirka je spremenljivka tabele, ki shranjuje vrstice in stolpce podatkov, ne le enega samega podatkovnega elementa. Zbirke so uporabne iz dveh glavnih razlogov: združevanje podatkov pred pošiljanjem v vir podatkov in predpomnjenje informacij, da se izognemo pogostim poizvedbam. Ker zbirke ustrezajo tabelarni strukturi podatkovnega vira in Power Apps, vam omogočajo učinkovito interakcijo s podatki, tudi ko ste offline.
// Clear the contents of EmployeeCollection, it already contains data
ClearCollect(
colEmployee,
{
Id: "1",
Name: "John",
Department: "IT"
},
{
Id: "2",
Name: "Nestor",
Department: "IT"
}
)
Odstranite neuporabljene spremenljivke in medije
Čeprav neuporabljeni mediji in spremenljivke morda ne vplivajo bistveno na zmogljivost aplikacije, je pomembno, da aplikacijo očistite z odstranitvijo vseh neuporabljenih medijev ali spremenljivk.
Neuporabljene medijske datoteke povečajo velikost aplikacije, kar lahko upočasni čas nalaganja aplikacije.
Neuporabljene spremenljivke povečajo porabo pomnilnika in lahko nekoliko upočasnijo inicializacijo aplikacije. Za te spremenljivke se dodelijo viri, tudi če se ne uporabljajo. Preveč neuporabljenih spremenljivk lahko tudi zaplete logiko aplikacije.
Za pregled neuporabljenih medijev in spremenljivk uporabite preverjevalnik aplikacij.
Optimizirajte zaslone in kontrole
Za optimizacijo zaslonov in kontrol v Power Apps upoštevajte naslednje najboljše prakse.
Izogibajte se navzkrižnemu sklicevanju na kontrole
Kontrolniki, ki se sklicujejo na kontrolnike na drugih zaslonih, lahko upočasnijo nalaganje in navigacijo po aplikacijah. Ta pristop lahko aplikacijo prisili, da naloži druge zaslone, namesto da bi čakala, da uporabnik pride tja. Za rešitev tega problema uporabite spremenljivke, zbirke in navigacijski kontekst za deljenje stanja med zasloni.
Preverjalnik aplikacij v Power Apps Studio prikazuje kontrole, ki so medsebojno referencirane. Redno pregledujte preverjevalnik aplikacij, da odpravite to težavo.
Na naslednji sliki je kontrola Gallery 1 medsebojno povezana v Zaslonu 2, Oznaka 2.
Če se sklicuješ na kontrolo s prvega zaslona v aplikaciji na drugem zaslonu, ni padca zmogljivosti, ker je prvi zaslon že naložen. To vedenje je dejansko koristno, ker je aplikacija deklarativna in ne uporablja spremenljivk.
Če se sklicujete na kontrole, ki še niso naložene, na primer prvi zaslon, ki se sklicuje na kontrolo, imenovano Label 3 s tretjega zaslona, aplikacija ta zaslon naloži v pomnilnik.
Omogoči DelayOutput za besedilne kontrolnike
Nastavitev DelayOutput , ko je nastavljena na resnično, zabeleži uporabniški vnos po polsekundnem zamiku. Ta zamik je uporaben za odlašanje dragih operacij, dokler uporabnik ne dokonča vnosa besedila, podobno kot filtriranje, ko se vnos uporablja v drugih formulah.
Na primer, razmislite o galeriji, katere elementi so filtrirani glede na to, kaj uporabnik vnese v kontrolnik TextInput:
Če nastavite DelayOutput na false, kar je privzeto, galerija filtrira takoj, ko je vneseno besedilo. Če imate galerijo z veliko predmeti, takojšnje nalaganje galerije s spremembami upočasni delovanje. Bolje je počakati. To vedenje je praktično, ko uporabljate za
TextInputiskalni niz ali funkcijoStartsWith.Če nastavite DelayOutput na true, je kratek zamik, preden se spremembe zaznajo. Ta zamuda omogoča čas za dokončanje tipkanja. Zamuda se dobro ujema z nepremičnino
TextInput.OnChange. Če imate dejanja, vezana na spremembe, jih ne želite, da se sprožijo, dokler ne zaključite s tipkanjem v polju.
Delegiranje in obdelava na strežniški strani
Uporaba delegiranja in obdelave na strežniški strani omogoča vaši aplikaciji učinkovito obvladovanje velikih podatkovnih zbirk, saj operacije prenese na vir podatkov.
Pooblastitev
Delegiranje v Power Apps se nanaša na sposobnost aplikacije, da določene operacije prenese na osnovni podatkovni vir, namesto da bi operacije obdelala znotraj samega Power Apps. Z uporabo delegiranja v Power Apps lahko ustvarite bolj učinkovite in razširljive aplikacije, ki dobro delujejo tudi v scenarijih z velikimi podatkovnimi nizi. Bodite pozorni na omejitve delegiranja za določene vire podatkov in operacije ter oblikujte aplikacijo temu primerno, da dosežete optimalno zmogljivost.
opomba,
Niso vse funkcije prenosljive. Več o delegiranju izveste v omejitvah poizvedb: omejitve delegiranja in poizvedb.
Delegiranje ima več prednosti, kot so optimizacija poizvedb in podpora za velike podatkovne zbirke. Poleg tega, če se izvorni podatki pogosto spreminjajo, delegiranje pomaga ohranjati podatke posodobljene.
Zmanjšajte število klicev API-ja do vira podatkov
Včasih se zdi priročno ustvarjati zbirke z izvajanjem združevanj znotraj aplikacije platna. Oglejte si naslednji primer: V primeru sta dve tabeli: Vozniki in Tovornjaki. Koda ustvari zbirko podatkov o voznikih in tovornjakih ter za vsak tovornjak pokliče voznika, ki je lastnik tovornjaka.
// 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)));
Izvajanje takšnega združevanja v aplikaciji platna lahko ustvari veliko klicev vira podatkov, kar vodi do počasnega nalaganja.
Boljši pristop je:
// 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'
)
)
V realnem času lahko čas nalaganja zmanjšate s petih minut na manj kot 10 sekund tako, da podatke popravite pri viru.
Obdelava na strežniški strani
Različni viri podatkov, kot sta SQL in Dataverse, vam omogočajo, da obdelavo podatkov, kot so filtri in iskanja, prenesete na vir podatkov. V SQL Server lahko ustvarite poglede, definirane s poizvedbo. V Dataverse, lahko ustvarite vtičnike z nizko kodo za obdelavo podatkov na strežniku in vračanje le končnih rezultatov v aplikacijo platna.
Delegiranje obdelave podatkov na strežnik lahko izboljša zmogljivost, zmanjša količino kode na strani odjemalca in olajša vzdrževanje aplikacije.
Več o tem vtičniki v Dataverse.
Optimizirajte vzorce podatkov poizvedb
Optimizacija načina, kako vaša aplikacija poizveduje podatke, lahko bistveno skrajša čas nalaganja in izboljša splošno odzivnost.
Uporabite eksplicitno izbiro stolpcev
Funkcija eksplicitne izbire stolpcev (ECS) je privzeto vklopljena za vse nove aplikacije. Če ni vklopljen v tvoji aplikaciji, ga vklopi. ECS samodejno zmanjša število pridobljenih stolpcev na samo tiste, ki se uporabljajo v aplikaciji. Če ECS ni vklopljen, lahko dobite več podatkov, kot jih potrebujete, kar lahko vpliva na delovanje. Včasih, ko aplikacija pridobiva podatke prek zbirk, se lahko prvotni vir stolpca izgubi. ECS odstrani stolpce, če ne more ugotoviti, ali so bili uporabljeni. Da prisilite ECS, da ohrani manjkajoči stolpec, uporabite izraz ShowColumns Power Fx po referenci zbirke ali v kontrolnem sistemu.
Izogibajte se klicanju Power Automate za polnjenje zbirke
Pogosta praksa je uporaba Power Automate za pridobivanje in polnjenje zbirk v Power Apps. Čeprav je ta pristop veljaven, obstajajo situacije, ko morda ni najučinkovitejša izbira. Klic Power Automate poveča omrežno zakasnitev in 0,6 sekunde stroškov zmogljivosti za vzpostavitev poteka Power Automate.
Prekomerna uporaba Power Automate tokov lahko prav tako vodi do omejitev izvajanja in omejevanja zmogljivosti. Vedno ocenite kompromise med omrežno zakasnitvijo in stroški zmogljivosti.
Odpravite problem N+1
Problem N+1 je pogosta težava pri poizvedbah v zbirkah podatkov, kjer se namesto pridobivanja vseh zahtevanih podatkov v eni sami poizvedbi izvede več dodatnih poizvedb za pridobivanje povezanih podatkov. Ta težava lahko vodi do težav z zmogljivostjo, saj vsaka dodatna poizvedba povzroča dodatne stroške.
Preprost klic, kot je ta, za nalaganje zbirke lahko generira N+1 klicev do podatkovnega vira:
ClearCollect(MyCollection, OrdersList,
{
LookUp(CustomersList,CustomerID = OrdersList[@CustomerID])
}
)
V kontekstu canvas aplikacij in galerij se lahko pojavi problem N+1 pri delu z viri podatkov in galerijami, ki prikazujejo povezane zapise. Do težave običajno pride, ko je za vsak element, prikazan v galeriji, izvedenih več poizvedb, kar povzroči ozko grlo v delovanju.
Uporabite objekte View v SQL Server, da se izognete problemu poizvedb N+1, ali pa spremenite uporabniški vmesnik, da ne sprožite scenarija N+1.
Dataverse samodejno pridobi zahtevane podatke iz povezanih tabel in lahko izberete stolpce iz povezanih tabel.
ThisItem.Account.'Account Name'
Če RelatedDataSource je velikost majhna (manj kot 500 zapisov), jo shranite v zbirko in uporabite zbirko za izvajanje scenarija Iskanje (N+1).
Omejite velikost paketa
Čeprav Power Apps optimizira nalaganje aplikacij, lahko sprejmete ukrepe za zmanjšanje odtisa svojih aplikacij. Zmanjšan odtis je še posebej pomemben za uporabnike starejših naprav ali za uporabnike na lokacijah z večjo zakasnitvijo ali manjšo pasovno širino.
Ocenite medije, vgrajene v vašo aplikacijo. Če nekaj ni uporabljeno, to izbrišite.
Na primer, vgrajene slike so lahko prevelike. Namesto datotek PNG preverite, ali lahko uporabite slike SVG. Bodite previdni pri uporabi besedila v SVG slikah, saj mora biti pisava nameščena na odjemalcu. Rešitev, ko morate prikazati besedilo, je, da na sliko prekrijete besedilno oznako.
Ocenite, ali je ločljivost ustrezna za obliko. Ločljivost za mobilno aplikacijo ni nujno tako visoka kot ločljivost za namizno aplikacijo. Eksperimentirajte, da dosežete pravo ravnovesje med kakovostjo in velikostjo slike.
Če imate neuporabljene zaslone, jih izbrišite. Pazite, da ne izbrišete skritih zaslonov, ki jih uporabljajo samo ustvarjalci aplikacij ali skrbniki.
Ocenite, ali poskušate v eno aplikacijo spraviti preveč delovnih procesov. Na primer, ali imate v isti aplikaciji tako skrbniške zaslone kot zaslone odjemalcev? Če je tako, razmislite o njihovi razdelitvi na posamezne aplikacije. Ta pristop tudi olajša delo več ljudi na aplikacijah hkrati in omeji "blast radius" (količino testiranja), ko spremembe aplikacij zahtevajo popoln test opravljen.
Optimiziraj za vse
Funkcija ForAll v Power Apps se uporablja za iteracijo skozi tabelo zapisov in uporabo formule ali nabora formul za vsak zapis. Čeprav je funkcija sama po sebi vsestranska, lahko nepravilna uporaba ForAll hitro zmanjša zmogljivost vaše aplikacije.
Funkcija ForAll je singularna zaporedna funkcija namesto sočasne funkcije. Zato gleda le en zapis naenkrat, dobi rezultat in nato nadaljuje na naslednji zapis, dokler ne pregleda vseh zapisov v svojem obsegu.
Izogibajte se gnezdenju ForAll. Ta praksa lahko vodi do eksponentnih iteracij in pomembno vpliva na zmogljivost.
ClearCollect(FollowUpMeetingAttendees.ForAll(ForAll(Distinct(AttendeesList.EmailAddress.Address).Lookup(Attendees))))
Serijska posodobitev baze podatkov
Lahko uporabiš ForAll in Patch za serijsko posodabljanje baze podatkov. Vendar bodite previdni, ko uporabljate vrstni red ForAll in .Patch
Naslednja funkcija je na primer boljši pristop:
Patch(SampleFoodSalesData, ForAll(colSampleFoodSales,
{
demoName:"fromCanvas2"
})
);
Medtem ko je naslednji pristop manj učinkovit:
ForAll(colSampleFoodSales, Patch(SampleFoodSalesData,
{
demoName:"test"
})
);