Nata
Norint pasiekti šį puslapį, reikalingas leidimas. Galite pabandyti prisijungti arba pakeisti katalogus.
Norint pasiekti šį puslapį, reikalingas leidimas. Galite pabandyti pakeisti katalogus.
Kadangi drobės programos tobulėja, kad atitiktų skirtingus verslo poreikius, labai svarbu išlaikyti optimalų našumą. Duomenų tvarkymas, vartotojo sąsajos dizainas ir programos funkcionalumas reikalauja kruopštaus požiūrio į kodo optimizavimą.
Kai drobės programos tampa sudėtingesnės, galite susidurti su duomenų nuskaitymo, formulės sudėtingumo ir atvaizdavimo greičio problemomis. Stiprių funkcijų ir reaguojančios vartotojo sąsajos subalansavimas reiškia, kad jums reikia sistemingo požiūrio į kodo optimizavimą.
Power Fx formulių optimizavimas
Su funkcija
Funkcija With įvertina vieno įrašo formulę. Formulė gali apskaičiuoti reikšmę arba atlikti veiksmus, pvz., modifikuoti duomenis arba dirbti su ryšiu. Naudokite With , kad sudėtingas formules būtų lengviau skaityti, padalydami jas į mažesnes pavadintas subformules. Šios įvardytos vertės veikia kaip paprasti vietiniai kintamieji, apsiribojantys taikymo sritimi With. Naudojimas With yra geresnis nei kontekstas ar pasauliniai kintamieji, nes jis yra savarankiškas, lengvai suprantamas ir veikia bet kokiame deklaratyvios formulės kontekste.
Sužinokite daugiau apie With funkciją.
Funkcija vienu metu
Funkcija Concurrent leidžia naudoti kelias tos pačios ypatybės formules, kurios bus įvertintos tuo pačiu metu, jei jos turi jungtį arba Dataverse skambučius. Paprastai kelios formulės įvertinamos tuo pačiu metu, kai jas susiejate su ; operatoriumi (kabliataškiu). Su Concurrent, programa įvertina visas ypatybės formules tuo pačiu metu, net ir panaudojus ; operatorių. Šis sutapimas reiškia, kad vartotojai mažiau laukia rezultatų. Kai duomenų skambučiai nepradedami tol, kol nesibaigia ankstesni skambučiai, programa laukia visų užklausų laikų sumos. Jei duomenų skambučiai prasideda tuo pačiu metu, programa laukia tik ilgiausio užklausos laiko.
Sužinokite daugiau apie Concurrent funkciją.
Concurrent(
ClearCollect(colAccounts1, Accounts),
ClearCollect(colUsers1, Users),
ClearCollect(colEnvDef1, 'Environment Variable Definitions'),
ClearCollect(colEnvVal1, 'Environment Variable Values')
);
Funkcija "Coalesce"
Funkcija Coalesce įvertina savo argumentus eilės tvarka ir grąžina pirmąją reikšmę, kuri nėra tuščia arba tuščia eilutė. Naudokite šią funkciją norėdami pakeisti tuščią arba tuščią eilutę kita reikšme, bet palikti nepakeistas netuščias ir tuščios eilutės reikšmes. Jei visi argumentai yra tuščios arba tuščios eilutės, funkcija pateikia tuščias.
Coalesce yra geras būdas konvertuoti tuščias eilutes į tuščias reikšmes.
Pavyzdys.
If(Not IsBlank(value1), value1, Not IsBlank(value2), value2)
Reikalauja, kad 1 ir 2 vertės būtų įvertintos du kartus. Šią funkciją galima sumažinti iki:
Coalesce(value1, value2)
IsMatch (funkcija "Match")
Funkcija IsMatch tikrina, ar teksto eilutė atitinka trafaretą, sudarytą iš įprastų simbolių, iš anksto nustatytų raštų arba paprastosios išraiškos.
Sužinokite daugiau apie IsMatch funkciją.
Pavyzdžiui, ši formulė atitinka Jungtinių Valstijų socialinio draudimo numerį:
IsMatch(TextInput1.Text, "\d{3}-\d{2}-\d{4}")
Taisyklingos išraiškos paaiškinimas:
\\d Atitinka bet kurį skaitmenį (0-9).
{3} Nurodo, kad ankstesnis skaitmenų raštas (\d) turi įvykti lygiai tris kartus.
- Atitinka brūkšnelio simbolį.
{2} Nurodo, kad ankstesnis skaitmenų raštas (\d) turi įvykti lygiai du kartus.
{4} Nurodo, kad ankstesnio skaitmens raštas (\d) turi būti lygiai keturis kartus.
Daugiau pavyzdžių IsMatch:
IsMatch(TextInput1.Text, "Hello World")
IsMatch(TextInput1\_2.Text, "(?!^\[0-9\]\\\*$)(?!^\[a-zA-Z\]\\\*$)(\[a-zA-Z0-9\]{8,10})")
Optimizuokite programą "OnStart".
"Cavas OnStart " programų nuosavybė vaidina lemiamą vaidmenį apibrėžiant veiksmus, kurie atliekami paleidus programą. Ši ypatybė leidžia programų kūrėjams vykdyti visuotines inicijavimo užduotis, nustatyti kintamuosius ir atlikti veiksmus, kurie turėtų būti atliekami tik vieną kartą programos paleidimo proceso metu. Norint sukurti reaguojančias ir efektyvias drobės programas, būtina suprasti ir efektyviai naudoti OnStart nuosavybę.
Rekomenduojamas būdas yra supaprastinti App.OnStart funkciją perkeliant kintamųjų sąrankas į pavadintas formules. Įvardytos formulės, ypač tos, kurios sukonfigūruotos programos gyvavimo ciklo pradžioje, yra naudingos. Šios formulės tvarko kintamųjų inicijavimą pagal duomenų iškvietimus, suteikdamos švaresnę ir labiau organizuotą jūsų kodo struktūrą. Daugiau informacijos Kurkite dideles ir sudėtingas drobės programas - Power Apps | Microsoft Learn.
Pastaba.
Turtas OnStart yra imperatyvus. Tai užsakytas darbų, kuriuos reikia atlikti prieš rodant pirmąjį ekraną, sąrašas. Kadangi jis yra toks konkretus ne tik dėl to, ką reikia padaryti, bet ir dėl to, kada tas darbas turi būti atliktas pagal užsakymą, jis riboja pertvarkymo ir atidėjimo optimizavimą, kurį kitu atveju būtų galima atlikti.
Pradžios ekranas
Jei App.OnStart yra Navigate funkcijos skambutis, net jei jis yra If funkcijoje ir retai iškviečiamas, turime užbaigti programos vykdymą.
OnStart prieš parodydami pirmąjį programos ekraną.
App.StartScreen yra naujas deklaratyvus būdas nurodyti, kuris ekranas turėtų būti rodomas pirmiausia, tai neblokuoja optimizavimo.
Nustačius ypatybę, StartScreen rodomas pirmasis ekranas, kol jis dar nebaigtas App.OnStart .
App.StartScreen declares kurį ekrano objektą rodyti pirmiausia, nereikalaujant jokio išankstinio apdorojimo.
Užuot rašę kodą, pvz.:
App.OnStart = Collect(OrdersCache, Orders);
If(Param("AdminMode") = "1", Navigate(AdminScreen), Navigate(HomeScreen))
Pakeiskite kodą į:
App.OnStart = Collect(OrdersCache, Orders);
App.StartScreen = If(Param("AdminMode") = "1", AdminScreen, HomeScreen)
Daugiau informacijos rasite <https://Power Apps.microsoft.com/en-us/blog/app-startscreen-a-new-declarative-alternative-to-navigate-in-app-onstart/> .
Įspėjimas
Venkite priklausomybių tarp StartScreen ir OnStart. Nurodžius įvardytą formulę, kuri savo ruožtu nurodo visuotinį kintamąjį, gali atsirasti rasės sąlyga, kuri StartScreen taikoma netinkamai.
Pastaba: neturėtume turėti priklausomybių tarp "StartScreen" ir "OnStart". "StartScreen" blokuojame pasaulinių kintamųjų nuorodas, bet galime nurodyti pavadintą formulę, kuri savo ruožtu nurodo visuotinį kintamąjį ir kuri gali sukelti lenktynių sąlygas, kai "StartScreen" taikomas netinkamai.
Įvardytos formulės
Įvardytos formulės yra statinės arba konstantos, kurias galima apibrėžti skyriuje App.Formulas. Kai jie deklaruojami App.Formulas, juos galima naudoti bet kurioje programos vietoje, o jų vertė visada atnaujinama. Pavadintas Formulės įgalina Power Apps reikšmių arba reikšmių rinkinių, kuriuos platforma automatiškai valdo ir atnaujina, apibrėžimą. Ši funkcija perduoda vertės skaičiavimo ir priežiūros atsakomybę iš kūrėjo Power Apps, supaprastindama kūrimo procesą. Pavadinta "Formulės" yra Power Apps galinga funkcija, kuri gali žymiai pagerinti programos našumą ir priežiūrą.
Įvardytos formulės taip pat gali adresuoti programų temas. Daugeliu atvejų, kai kuriamos įmonėms skirtos programos, norime, kad programa turėtų bendras temas, kad užtikrintų nuoseklią išvaizdą ir vartotojo patirtį. Norint sukurti temą, yra 10 ir 100 kintamųjų, kuriuos reikia deklaruoti "App OnStart". Tai padidino kodo ilgį ir programos inicijavimo laiką.
Šiuolaikiniai valdikliai taip pat gali labai padėti su temomis ir padėti sumažinti kliento rašytinę logiką, kad būtų galima tvarkyti temas. Šiuolaikiniai valdikliai šiuo metu yra peržiūros versijoje.
Pavyzdžiui, šį kodą galima App.OnStart perkelti į App.Formulas, taip sutrumpinant visuotinių kintamųjų deklaracijų paleidimo laiką.
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");
Kodą galima perkelti į App.Formulas taip:
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";
Kitas pavyzdys – užeigos nustatymas Lookups. Čia reikia pakeisti peržvalgos formulę, kad gautumėte vartotojo informaciją iš Office 365, o ne Dataverse. Yra tik viena vieta, kur reikia pakeisti, nekeičiant kodo visur.
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');
Šios formulės įkūnija skaičiavimo esmę. Jie suformuluoja nustatymo UserEmail procesą, UserInfo,, UserTitle ir UserPhone remiasi kitomis vertybėmis. Ši logika yra apibendrinta, todėl ją galima plačiai naudoti visoje programoje ir ją galima modifikuoti vienoje vietoje. Pritaikomumas apima perjungimą Dataverse iš lentelės Vartotojai į jungtį, Office 365 nereikalaujant keisti formulių, išsibarsčiusių visoje programoje.
Kitas būdas yra optimizuoti countRows.
varListItems = CountRows(SampleList)
Naudojant Set funkciją, kintamasis varListItems turės būti inicijuotas naudojant pradinį eilučių skaičių pavyzdiniame sąraše ir vėl nustatytas po to, kai sąrašo elementai buvo įtraukti arba pašalinti. Naudojant įvardytas formules, keičiantis duomenims, varListitems kintamieji atnaujinami automatiškai.
Pavadintos formulės ypatybėje App.Formulas suteikia lankstesnį ir deklaratyvesnį požiūrį į reikšmių ir skaičiavimų valdymą visoje programoje, suteikdamas pranašumų, susijusių su laiko nepriklausomumu, automatiniais atnaujinimais, prižiūrimumu ir nekintamais apibrėžimais, palyginti su pasitikėjimu tik App.OnStart.
| Veidas | Pavadintos formulės (App.Formulas) | App.OnStart |
|---|---|---|
| Laiko nepriklausomumas | Formulės yra prieinamos iš karto, gali būti apskaičiuojamos bet kokia tvarka. | Kintamieji gali sukelti priklausomybę nuo laiko, o tai turi įtakos prieinamumui. |
| Automatiniai naujinimai | Formulės automatiškai atnaujinamos, kai pasikeičia priklausomybės. | Kintamieji nustatomi vieną kartą paleidimo metu; Gali prireikti rankiniu būdu atnaujinti. |
| Prižiūrimumas | Centralizuotos formulės vienoje vietoje pagerina priežiūrą. | Išsklaidytus kintamuosius gali reikėti rasti ir atnaujinti keliose vietose. |
| Nekintami apibrėžimai | Formulių apibrėžimai App.Formulėse yra nekintami. | Kintamos vertės gali būti jautrios atsitiktiniams pokyčiams. |
Vartotojo apibrėžtos funkcijos
Vartotojo apibrėžtos funkcijos Power Apps "Authoring Studio" leidžia vartotojams sukurti savo pasirinktinę funkciją.
Norėdami naudoti šią funkciją, dalyje Peržiūros parametrai įjunkite Vartotojo apibrėžta funkcija (UDF). Peržiūros funkcija neturėtų būti naudojama gamyboje, todėl pagal numatytuosius nustatymus ji yra išjungta, tačiau netrukus taps visuotinai prieinama.
Apibrėžkite formulę App.Formulas taip:
FunctionName(Parameter1:DataType1, Parameter2:DataType2):OutputDataType = Formula
Kodas veikia taip:
FunctionNamenaudojamas funkcijai iškviestiParameteryra įvesties pavadinimas. Leidžiama naudoti vieną ar daugiau įvesties duomenųDataTypeyra argumentas, perduotas į funkciją, turi atitikti šį duomenų tipą. Galimi duomenų tipai: bulio logika, spalva, data, data, dinaminis, GUID, hipersaitas, tekstas ir laikasOutputDataTypeyra duomenų tipas, kuriame bus funkcijos išvestisFormulayra funkcijos išvestis
// Function to calculate the area of a circle based on the radius
calcAreaOfCircle(radius: Number): Number =
IfError(Pi() * radius * radius, 0);
Naudokite IfError norėdami įdiegti klaidų tvarkymą apibrėžtoje funkcijoje.
Iškvieskite apibrėžtą funkciją iš teksto / etiketės valdiklio.
calcAreaOfCircle(Int(*TextInput1*.Text))
Pastaba.
Tai yra eksperimentinė funkcija ir gali keistis. Kai kurie duomenų tipai, pvz., įrašai ir filtrai, dar nepalaikomi.
Optimizuokite kintamuosius
Kintamieji apibrėžia ir nustato vietines ir pasaulines vertes, kurias naudojate visoje programoje. Nors jie yra patogūs, naudojant per daug kintamųjų programa gali tapti mažiau efektyvi.
Toliau pateiktame pavyzdyje parodyta, kaip nustatyti kintamąjį kiekvienam objekto atributui, kurį reikia naudoti Set kiekvienai ypatybei.
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);
Efektyvesnis būdas yra naudoti turtą tik tada, kai jums to reikia:
Set(varEmployee, Office365Users.MyProfile())
"Welcome " & varEmployee.DisplayName
Protingai naudokite konteksto kintamuosius ir visuotinius kintamuosius. Jei kintamojo aprėptis viršija vieną ekraną, vietoj konteksto kintamųjų naudokite visuotinius kintamuosius.
Per daug nenaudojamų kintamųjų padidina atminties naudojimą ir gali sulėtinti programos inicijavimą. Šiems kintamiesiems skiriami ištekliai, net jei jų nenaudojate. Nenaudojami kintamieji taip pat apsunkina programos logiką. Nors poveikis gali būti nedidelis, gera praktika yra išlaikyti "Power App" švarią ir tvarkingą, kad būtų užtikrintas geresnis našumas ir lengvesnis tobulinimas.
Optimizuokite kolekcijas
Rinkiniai yra laikinos duomenų saugojimo struktūros, kurias naudojate duomenims programoje saugoti ir jais manipuliuoti Power Apps . Tačiau kolekcijos gali sukelti našumo pridėtinių išlaidų, jei jas naudosite per daug. Apribokite kolekcijų naudojimą ir naudokite jas tik tada, kai reikia.
// Use this pattern
ClearCollect(colErrors, {Text: gblErrorText, Code: gblErrorCode});
// Do not use this pattern
Clear(colErrors);
Collect(colErrors, {Text: gblErrorText, Code: gblErrorCode});
Norėdami skaičiuoti įrašus vietiniame rinkinyje, naudokite CountIf vietoj Count(Filter()).
Apsvarstykite šias gaires dirbdami su kolekcijomis:
Apribokite kolekcijų dydį ir skaičių. Kadangi kolekcijos yra vietinės programos, jos saugomos mobiliojo įrenginio atmintyje. Kuo daugiau duomenų rinkinių yra arba kuo daugiau rinkinių naudojate, tuo prastesnis našumas. Naudokite funkciją, ShowColumns kad gautumėte tik konkrečius stulpelius. Pridėkite funkciją, Filter kad gautumėte tik atitinkamus duomenis.
Toliau pateiktas funkcijos pavyzdys pateikia visą duomenų rinkinį.
ClearCollect(colDemoAccount, Accounts);
Palyginkite jį su šiuo kodu, kuris pateikia tik konkrečius įrašus ir stulpelius:
ClearCollect(colAcc,
ShowColumns(
Filter(Accounts, !IsBlank('Address 1: City')),
"name","address1_city"))
Šiame pavyzdyje pateikiamas šis duomenų rinkinys:
Nustatykite duomenų šaltinio atnaujinimo dažnį. Jei į rinkinį įtraukiate naujų įrašų, atnaujinkite jį arba surinkite, kad gautumėte naujus arba pakeistus įrašus. Jei keli vartotojai atnaujina jūsų duomenų šaltinį, atnaujinkite rinkinį, kad gautumėte naujus arba pakeistus įrašus. Daugiau atnaujinimo skambučių reiškia daugiau sąveikos su serveriu.
Talpyklos duomenys kolekcijose ir kintamuosiuose
Rinkinys yra lentelės kintamasis, kuriame saugomos duomenų eilutės ir stulpeliai, o ne tik vienas duomenų elementas. Rinkiniai yra naudingi dėl dviejų pagrindinių priežasčių: duomenų kaupimo prieš siunčiant juos į duomenų šaltinį ir informacijos kaupimo talpykloje, kad būtų išvengta dažnų užklausų. Kadangi rinkiniai atitinka duomenų šaltinio lentelės struktūrą ir Power Apps leidžia efektyviai sąveikauti su duomenimis, net kai esate neprisijungę.
// Clear the contents of EmployeeCollection, it already contains data
ClearCollect(
colEmployee,
{
Id: "1",
Name: "John",
Department: "IT"
},
{
Id: "2",
Name: "Nestor",
Department: "IT"
}
)
Pašalinkite nenaudojamus kintamuosius ir laikmeną
Nors nenaudojama medija ir kintamieji gali neturėti reikšmingos įtakos programos našumui, svarbu išvalyti programą pašalinant visas nenaudojamas laikmenas ar kintamuosius.
Nenaudojami medijos failai padidina programos dydį, o tai gali sulėtinti programos įkėlimo laiką.
Nenaudojami kintamieji padidina atminties naudojimą ir gali šiek tiek sulėtinti programos inicijavimą. Šiems kintamiesiems skiriami ištekliai, net jei jie nenaudojami. Per daug nenaudojamų kintamųjų taip pat gali apsunkinti programos logiką.
Naudokite programų tikrintuvą, kad peržiūrėtumėte nenaudojamą laikmeną ir kintamuosius.
Optimizuokite ekranus ir valdiklius
Kryžminių nuorodų valdiklių vengimas
Valdikliai, nurodantys valdiklius kituose ekranuose, gali sulėtinti programų įkėlimą ir naršymą. Tai padarius, programa gali būti priversta nedelsiant įkelti kitus ekranus, o ne laukti, kol vartotojas pateks į tą ekraną. Norėdami išspręsti šią problemą, naudokite kintamuosius, rinkinius ir naršymo kontekstą, kad bendrintumėte būseną visuose ekranuose.
Taikomųjų programų tikrintuvas rodo Power Apps Studio valdiklius, su kryžminėmis nuorodomis. Reguliariai peržiūrėkite programų tikrintuvą, kad išspręstumėte šią problemą.
Čia pateikiamas kryžminių nuorodų valdiklių pavyzdys. Žemiau esančiame paveikslėlyje "Gallery 1" valdiklis yra kryžminės nuorodos į 2 ekrano 2 etiketės valdiklį.
Jei nurodote valdiklį iš pirmojo programos ekrano antrame ekrane, našumas neįvyksta, nes pirmasis ekranas jau įkeltas. Tai iš tikrųjų gali būti geras dalykas, nes programa yra deklaratyvi, o ne naudoja kintamuosius.
Jei nurodote valdiklius, kurie dar neįkelti, pvz., pirmąjį ekraną, nurodantį valdiklį, pavadintą Label 3 iš 3 ekrano, programa įkelia tą ekraną į atmintį.
Įgalinti DelayOutput teksto valdikliams
Parametras DelayOutput, kai nustatytas kaip true, registruoja vartotojo įvestį po pusės sekundės delsos. Tai naudinga norint atidėti brangias operacijas, kol vartotojas baigs įvesti tekstą, pvz., filtruoti, kai įvestis naudojama kitose formulėse.
Pavyzdžiui, galerijoje, kurios elementai filtruojami atsižvelgiant į tai, ką vartotojas įveda į valdiklį TextInput:
Kai DelayOutput nustatyta kaip false, kuri yra numatytoji, galerija filtruojama, kai tik įvedamas bet koks tekstas. Jei turite galeriją, kurioje yra daug elementų, galerijos įkėlimas iš naujo su pakeitimais iš karto sulėtina našumą. Geriau šiek tiek palaukti. Tai praktiška, kai naudojate TextInput paieškos eilutei (žr . funkcijas Ieška arba naujas StartSWith funkcijas).
Kai DelayOutput nustatyta kaip true, šiek tiek uždelsta, kol bus aptikti pakeitimai. Tai suteikia laiko baigti vesti tekstą. Delsa gerai veikia su "TextInput.OnChange" ypatybe. Jei turite veiksmų, susietų su pakeitimais, nenorite, kad jie būtų suaktyvinti, kol nebaigsite įvesti teksto lauke.
Delegavimas ir serverio pusės apdorojimas
Perdavimas
Delegavimas Power Apps yra sąvoka, nurodanti programos gebėjimą perkelti tam tikras operacijas į pagrindinį duomenų šaltinį, o ne apdoroti operacijas pačiose Power Apps . Naudodami delegavimą Power Apps, kūrėjai gali kurti efektyvesnes ir keičiamo dydžio programas, kurios gerai veikia net ir tais atvejais, kai naudojami dideli duomenų rinkiniai. Svarbu žinoti konkrečių duomenų šaltinių ir operacijų perdavimo apribojimus ir atitinkamai kurti programas, kad būtų pasiektas optimalus našumas.
! [PASTABA] Ne visos funkcijos yra perduodamos. Norėdami sužinoti daugiau apie delegavimą, žiūrėkite Delegavimo supratimas.
Delegavimas turi keletą privalumų, pvz., užklausų optimizavimą ir prideda didelių duomenų rinkinių palaikymą. Be to, jei šaltinio duomenys dažnai keičiasi, perdavimas padeda nuolat atnaujinti duomenis.
Sumažinkite API skambučių į duomenų šaltinį skaičių
Kartais gali atrodyti patogu kurti kolekcijas atliekant sujungimus drobės programoje. Toliau pateiktas pavyzdys.
Šiame pavyzdyje yra dvi lentelės: Vairuotojai ir Sunkvežimiai. Kodas sukuria vairuotojų ir sunkvežimio detalių rinkinį, o kiekvienam sunkvežimiui skambina vairuotojas, kuriam priklauso sunkvežimis.
// 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)));
Atliekant tokį prisijungimą drobės programoje gali būti sukurta daug skambučių į duomenų šaltinį, o tai lemia lėtą įkėlimo laiką.
Geresnis požiūris yra:
// 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'
)
)
Realaus laiko scenarijuje galite sutrumpinti įkėlimo laiką nuo penkių minučių iki mažiau nei 10 sekundžių, pataisydami duomenis šaltinyje.
Serverio pusės apdorojimas
Skirtingi duomenų šaltiniai, pvz., SQL ir Dataverse leidžia perduoti duomenų apdorojimą, pvz., filtrus ir peržvalgas, duomenų šaltiniui. SQL serveryje galite kurti užklausos apibrėžtus rodinius. Galite Dataverse sukurti žemo kodo papildinius, kad apdorotumėte duomenis serveryje ir grąžintumėte tik galutinius rezultatus į savo drobės programą.
Duomenų apdorojimo perdavimas serveriui gali pagerinti našumą, sumažinti kliento pusės kodą ir palengvinti programos priežiūrą.
Sužinokite daugiau apie papildinius Dataverse.
Užklausos duomenų šablonų optimizavimas
Naudokite aiškų stulpelio pasirinkimą
Aiškaus stulpelio pasirinkimo (ECS) funkcija pagal numatytuosius nustatymus įjungta visose naujose programose. Jei jis neįjungtas programoje, įjunkite ją. ECS automatiškai sumažina nuskaitytų stulpelių skaičių iki tik programoje naudojamų stulpelių. Jei ECS neįjungtas, galite gauti daugiau duomenų, nei reikia, o tai gali turėti įtakos našumui. Kartais, kai programa gauna duomenis iš rinkinių, pradinis stulpelio šaltinis gali būti prarastas. ECS numeta stulpelius, jei negali pasakyti, kad jie naudojami. Norėdami priversti ECS išlaikyti trūkstamą stulpelį, naudokite "PowerFx" išraišką ShowColumns po rinkinio nuorodos arba valdiklyje.
Venkite skambinti Power Automate norėdami užpildyti kolekciją
Įprasta praktika yra naudoti Power Automate kolekcijoms gauti ir užpildyti Power Apps. Nors šis požiūris galioja, yra situacijų, kai tai gali būti ne pats efektyviausias pasirinkimas. Skambinimas Power Automate turi tinklo delsos pridėtines išlaidas ir padidina 0.6 sekundės našumo išlaidas, Power Automate kad srautas būtų greitas.
Pernelyg intensyvus Power Automate srautų naudojimas taip pat gali lemti vykdymo ribas ir ribojimą. Todėl visada įvertinkite kompromisus tarp tinklo delsos ir našumo sąnaudų.
Pašalinkite N+1 problemą
N+1 problema yra dažna duomenų bazių užklausų problema, kai, užuot gavus visus reikiamus duomenis vienoje užklausoje, atliekamos kelios papildomos užklausos susijusiems duomenims nuskaityti. Dėl to gali kilti našumo problemų, nes kiekviena papildoma užklausa patiria pridėtinių išlaidų.
Toks paprastas skambutis, kaip šis, norint įkelti kolekciją, gali generuoti N+1 skambučius į duomenų šaltinį.
ClearCollect(MyCollection, OrdersList,
{
LookUp(CustomersList,CustomerID = OrdersList[@CustomerID])
}
)
Drobės programų ir galerijų kontekste N+1 problema gali kilti dirbant su duomenų šaltiniais ir galerijomis, kuriose rodomi susiję įrašai. Problema paprastai kyla, kai pateikiama daugiau užklausų dėl kiekvieno galerijoje rodomo elemento, todėl atsiranda našumo kliūtis.
Naudokite Peržiūrėti objektus SQL serveryje, kad išvengtumėte N+1 užklausos problemos, arba pakeiskite vartotojo sąsają, kad išvengtumėte N+1 scenarijaus suaktyvinimo.
Dataverse Automatiškai gauna reikiamus susijusių lentelių duomenis ir galite pasirinkti stulpelius iš susijusių lentelių.
ThisItem.Account.'Account Name'
Jei RelatedDataSource' dydis yra mažas (<500 įrašų), galite jį laikyti rinkinyje talpykloje ir naudoti rinkinį peržvalgos (N+1) užklausos scenarijui valdyti.
Pakuotės dydžio ribojimas
Nors Power Apps labai padeda optimizuoti programų įkėlimą, galite imtis veiksmų, kad sumažintumėte savo programų pėdsaką. Mažesnis pėdsakas yra ypač svarbus senesnių įrenginių naudotojams arba naudotojams vietovėse, kur yra didesnė delsa arba mažesnis pralaidumas.
Įvertinkite programoje įterptą mediją. Jei kažkas nenaudojama, ištrinkite jį.
Įdėtieji vaizdai gali būti per dideli. Vietoj PNG failų pažiūrėkite, ar galite naudoti SVG vaizdus. Tačiau būkite atsargūs naudodami tekstą SVG vaizduose, nes naudojamas šriftas turės būti įdiegtas kliente. Puikus sprendimas, kai reikia rodyti tekstą, yra teksto etiketės uždėjimas ant vaizdo.
Įvertinkite, ar skiriamoji geba tinka formos faktoriui. Programos mobiliesiems skiriamoji geba nebūtinai turi būti tokia didelė kaip darbalaukio programėlės. Eksperimentuokite, kad gautumėte tinkamą vaizdo kokybės ir dydžio pusiausvyrą.
Jei turite nenaudojamų ekranų, ištrinkite juos. Būkite atsargūs ir neištrinkite jokių paslėptų ekranų, kuriuos naudoja tik programų kūrėjai arba administratoriai.
Įvertinkite, ar bandote į vieną programą sutalpinti per daug darbo eigų. Pavyzdžiui, ar toje pačioje programoje turite ir administratoriaus, ir kliento ekranus? Jei taip, apsvarstykite galimybę suskirstyti jas į atskiras programas. Šis metodas taip pat palengvins kelių žmonių darbą su programomis vienu metu ir apribos "sprogimo spindulį" (testavimo kiekį), kai programų pakeitimams reikalingas visas bandymo leidimas.
Optimizuoti "ForAll"
Funkcija ForAll in Power Apps naudojama kartoti įrašų lentelę ir kiekvienam įrašui taikyti formulę arba formulių rinkinį. Nors pati funkcija yra universali, netinkamas "ForAll" funkcijos naudojimas gali greitai sumažinti jūsų programos našumą.
Funkcija ForAll yra vienaskaitos nuoseklioji funkcija, o ne vienalaikė funkcija. Todėl jis žiūri tik į vieną įrašą vienu metu, gauna rezultatą, tada tęsia kitą, kol praeina visus savo apimties įrašus.
Venkite lizdųVisi bet kokia kaina. Tai gali sukelti eksponentines iteracijas ir žymiai paveikti našumą.
ClearCollect(FollowUpMeetingAttendees.ForAll(ForAll(Distinct(AttendeesList.EmailAddress.Address).Lookup(Attendees))))
Paketiniai duomenų bazės naujinimai
"ForAll + Patch" gali būti vienas iš būdų paketiniam duomenų bazės atnaujinimui. Tačiau būkite atsargūs naudodami "For All" ir "Patch" tvarką.
Ši funkcija:
Patch(SampleFoodSalesData, ForAll(colSampleFoodSales,
{
demoName:"fromCanvas2"
})
);
Veikia geriau nei:
ForAll(colSampleFoodSales, Patch(SampleFoodSalesData,
{
demoName:"test"
})
);