Pastaba.
Prieigai prie šio puslapio reikalingas įgaliojimas. Galite bandyti prisijungti arba pakeisti katalogus.
Prieigai prie šio puslapio reikalingas įgaliojimas. Galite bandyti 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ų gavimo, formulės sudėtingumo ir atvaizdavimo greičio problemomis. Norėdami suderinti stiprias funkcijas su reaguojančia vartotojo sąsaja, naudokite sistemingą kodo optimizavimo metodą.
"Power Fx" formulės optimizavimas
Šiame skyriuje pateikiama geriausia "Power Fx" formulių optimizavimo praktika.
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.
With yra geresnis už kontekstą ar globalius kintamuosius, nes jis yra savarankiškas, lengvai suprantamas ir veikia bet kokiame deklaratyvios formulės kontekste. Sužinokite daugiau apie funkciją With.
Funkcija vienu metu
Ši Concurrent funkcija leidžia vienu metu įvertinti kelias tos pačios ypatybės formules, jei jos turi jungties arba "Dataverse" iškvietimus. 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 laukia mažiau laiko 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 funkciją Concurrent.
Concurrent(
ClearCollect(colAccounts1, Accounts),
ClearCollect(colUsers1, Users),
ClearCollect(colEnvDef1, 'Environment Variable Definitions'),
ClearCollect(colEnvVal1, 'Environment Variable Values')
);
Sujungimo funkcija
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. Sužinokite daugiau apie funkciją Sujungti.
Šis pavyzdys reikalauja value1 ir value2 turi būti įvertintas du kartus:
If(Not IsBlank(value1), value1, Not IsBlank(value2), value2)
Š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 funkciją "IsMatch".
Pavyzdžiui, ši formulė atitinka United States Social Security numerį:
IsMatch(TextInput1.Text, "\d{3}-\d{2}-\d{4}")
Taisyklingos išraiškos paaiškinimas:
\\dAtitinka 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".
Drobės OnStart programų ypatybė 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. Supraskite ir efektyviai naudokite ypatybę, OnStart kad sukurtumėte interaktyvias ir efektyvias drobės programas.
Supaprastinkite App.OnStart funkciją perkeldami kintamųjų nustatymus į pavadintas formules. Pavadintos formulės, ypač sukonfigūruotos programos 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ą. Sužinokite daugiau dalyje Didelių ir sudėtingų drobės programų kūrimas.
Pastaba.
Savybė OnStart yra būtina. Tai tvarkingas darbų, kuriuos reikia atlikti prieš pasirodant pirmajam ekranui, sąrašas. Kadangi jis taip konkrečiai nurodo ne tik tai, ką reikia padaryti, bet ir kada tas darbas turi būti atliktas pagal užsakymą, jis riboja pertvarkymą ir atidėjimą optimizavimui, kuris kitu atveju galėtų būti atliktas.
Pradžios ekranas
Jei App.OnStart yra funkcijos iškvietimas Navigate , net jei jis yra If funkcijoje ir retai iškviečiamas, programa turi užbaigti vykdymą App.OnStart , kad būtų rodomas pirmasis programos ekranas.
App.StartScreen yra deklaratyvus būdas nurodyti, kuris ekranas turėtų būti rodomas pirmas, ir neblokuoja optimizavimo.
Nustačius ypatybę, StartScreen rodomas pirmasis ekranas, kol jis dar nebaigtas App.OnStart .
App.StartScreen Nurodo, kuris ekrano objektas turi būti rodomas 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: "App.StartScreen": deklaratyvi "App.OnStart" naršymo alternatyva.
Perspėjimas
Venkite priklausomybių tarp StartScreen ir OnStart. Nuoroda į pavadintą formulę, kuri savo ruožtu nurodo visuotinį kintamąjį, gali sukelti lenktynių sąlygą, kuri StartScreen taikoma netinkamai.
Nekurkite priklausomybių tarp StartScreen ir OnStart. Nors programa blokuoja nuorodas StartScreenį visuotinius kintamuosius, galite nurodyti pavadintą formulę, kuri savo ruožtu nurodo visuotinį kintamąjį. Šis metodas gali sukelti lenktynių sąlygą, StartScreen kai jis taikomas netinkamai.
Įvardytos formulės
Įvardytos formulės yra statinės arba konstantos, kurias galima apibrėžti .App.Formulas Paskelbus , App.Formulasjuos galima naudoti bet kurioje programos vietoje, o jų reikšmės visada bus atnaujintos. Pavadintos formulės "Power Apps" leidžia apibrėžti reikšmes arba reikšmių rinkinius, kuriuos platforma automatiškai valdo ir atnaujina. Ši funkcija perkelia atsakomybę už vertės skaičiavimą ir priežiūrą iš kūrėjo į "Power Apps", supaprastindama kūrimo procesą. Pavadintos formulės "Power Apps" yra galinga funkcija, galinti žymiai pagerinti programos našumą ir priežiūrą.
Pavadintos formulės taip pat padeda deklaruojant programų temas. Kurdami įmonės programas dažnai norite, kad programoje būtų bendrų temų, užtikrinančių nuoseklią išvaizdą ir vartotojo patirtį. Norėdami sukurti temą, turite deklaruoti dešimtis ar šimtus kintamųjų .App.OnStart Ši deklaracija padidina 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, galite perkelti šį kodą į App.OnStartApp.Formulas, kuris sumažina 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ą galite perkelti į App.Formulas šiuos veiksmus:
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 yra nustatymas Lookups. Čia reikia pakeisti formulę Lookup, kad vartotojo informacija būtų gauta iš Office 365, o ne iš "Dataverse". Jums reikia atlikti pakeitimą tik vienoje vietoje, visur nekeičiant kodo.
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 perėjimą iš "Dataverse" vartotojų lentelės į "Office 365" jungtį, nekeičiant programoje išsibarsčiusių formulių.
Kitas būdas yra optimizuoti countRows.
varListItems = CountRows(SampleList)
Naudodami Set funkciją turite inicijuoti kintamąjį varListItems su pradiniu eilučių skaičiumi pavyzdiniame sąraše ir vėl nustatyti jį pridėjus arba pašalinus sąrašo elementus. Naudojant pavadintas formules, keičiantis duomenims, varListItems kintamasis atnaujinamas automatiškai.
Ypatybėje esančios App.Formulas įvardytos formulės suteikia lankstesnį ir deklaratyvesnį požiūrį į reikšmių ir skaičiavimų valdymą visoje programoje. Jie turi pranašumų dėl laiko nepriklausomybės, automatinių atnaujinimų, prižiūrimumo ir nekintamų apibrėžimų, palyginti su pasikliovimu vien .App.OnStart
| Veidas | Pavadintos formulės (App.Formulas) | App.OnStart |
|---|---|---|
| Laiko nepriklausomybė | Formulės pasiekiamos akimirksniu ir gali būti apskaičiuojamos bet kokia tvarka. | Kintamieji gali įvesti laiko priklausomybes, turinčias įtakos pasiekiamumui. |
| Automatiniai atnaujinimai | Formulės automatiškai atnaujinamos, kai pasikeičia priklausomybės. | Kintamieji nustatomi vieną kartą paleidimo metu; Gali prireikti atnaujinti rankiniu būdu. |
| 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 | Formulės apibrėžimai yra App.Formulas nekintami. |
Kintamosios vertės gali būti atsitiktinai pakeistos. |
Vartotojo apibrėžtos funkcijos
Vartotojo nustatytos funkcijos Power Apps Studio leidžia kurti savo pasirinktines funkcijas.
Apibrėžkite formulę App.Formulas taip:
FunctionName(Parameter1:DataType1, Parameter2:DataType2):OutputDataType = Formula
Kodas veikia taip:
FunctionNameiškviečia funkciją.Parameteryra įvesties pavadinimas. Galite įtraukti vieną ar daugiau įvesties.DataTypeyra duomenų tipas, kurį turi atitikti į funkciją perduotas argumentas. Galimi duomenų tipai: Bulio logika, Spalva, Data, Datos laikas, Dinaminis, GUID, Hipersaitas, Tekstas ir Laikas.OutputDataTypeyra funkcijos išvesties duomenų tipas.Formulayra funkcijos išvestis.
Naudokite IfError klaidų tvarkymui apibrėžtoje funkcijoje įgyvendinti:
// Function to calculate the area of a circle based on the radius
calcAreaOfCircle(radius: Number): Number =
IfError(Pi() * radius * radius, 0);
Iškviesti apibrėžtą funkciją iš teksto arba žymos valdiklio.
calcAreaOfCircle(Int(*TextInput1*.Text))
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ą. Laikykite savo "Power App" švarią ir tvarkingą, kad būtų geresnis našumas ir lengvesnis kūrimas.
Optimizuokite kolekcijas
Rinkiniai yra laikini duomenų storage struktūros, kurias naudojate duomenims saugoti ir valdyti "Power Apps" programoje. Tačiau kolekcijos gali sukelti našumo padidėjimą. 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 šį požiūrį 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ą,
ShowColumnskad gautumėte tik konkrečius stulpelius. Pridėkite funkciją,Filterkad gautumėte tik atitinkamus duomenis.Toliau pateiktas funkcijos pavyzdys pateikia visą duomenų rinkinį:
ClearCollect(colDemoAccount, Accounts);Palyginkite šią funkciją 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 ir "Power Apps" lentelių struktūrą, jie 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 didelės įtakos programos našumui, svarbu išvalyti programą pašalinant nenaudojamą mediją 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
Norėdami optimizuoti ekranus ir valdiklius "Power Apps", atsižvelkite į toliau nurodytą geriausią praktiką.
Kryžminių nuorodų valdiklių vengimas
Valdikliai, nurodantys valdiklius kituose ekranuose, gali sulėtinti programų įkėlimą ir naršymą. Šis metodas gali priversti programą į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.
"Power Apps Studio" programų tikrintuvas rodo valdiklius, kurie yra kryžminės nuorodos. Reguliariai peržiūrėkite programų tikrintuvą, kad išspręstumėte šią problemą.
Toliau pateiktame paveikslėlyje valdiklis Galerija 1 yra kryžminės nuorodos į 2 ekrano 2 žymos valdiklį.
Jei nurodysite valdiklį iš pirmojo programos ekrano antrajame ekrane, našumas nebus pasiektas, nes pirmasis ekranas jau įkeltas. Toks elgesys iš tikrųjų yra naudingas, nes programa yra deklaratyvi, o ne naudoja kintamuosius.
Jei nurodote valdiklius, kurie dar neįkelti, pvz., pirmąjį ekraną, kuriame nurodomas valdiklis, pavadintas Label 3 iš 3 ekrano, programa įkelia tą ekraną į atmintį.
Įgalinti DelayOutput teksto valdikliams
Nustačius " DelayOutput " nustatymą į "true", vartotojo įvestis užregistruojama po pusės sekundės vėlavimo. Šis delsimas naudingas atidedant brangias operacijas, kol vartotojas baigs įvesti tekstą, pvz., filtravimą, kai įvestis naudojama kitose formulėse.
Pavyzdžiui, apsvarstykite galeriją, kurios elementai filtruojami atsižvelgiant į tai, ką vartotojas įveda į valdiklį TextInput:
Jei nustatysite DelayOutput kaip false, kuris yra numatytasis, galerija filtruojama, kai tik įvedamas tekstas. Jei galerijoje yra daug elementų, iš karto įkėlus galeriją su pakeitimais sulėtėja našumas. Geriau palaukti. Toks elgesys yra praktiškas, kai naudojate
TextInputpaieškos eilutę arbaStartsWithfunkciją.Jei nustatysite DelayOutput kaip true, bus trumpas uždelsimas, kol bus aptikti pakeitimai. Ši delsa suteikia laiko baigti rašyti. Vėlavimas gerai veikia su
TextInput.OnChangenuosavybe. Jei turite veiksmų, susietų su keitimais, nenorite, kad jie būtų suaktyvinti, kol nebaigsite įvesti teksto lauke.
Delegavimas ir apdorojimas serveryje
Naudojant delegavimą ir serverio apdorojimą, programa gali efektyviai apdoroti didelius duomenų rinkinius, perkeliant operacijas į duomenų šaltinį.
Perdavimas
Delegavimas "Power Apps" reiškia programos galimybę perkelti tam tikras operacijas į pagrindinį duomenų šaltinį, o ne apdoroti operacijas pačioje "Power Apps". Naudodami delegavimą "Power Apps" galite kurti efektyvesnes ir keičiamo dydžio programas, kurios gerai veikia net ir scenarijuose, susijusiuose su dideliais duomenų rinkiniais. Atkreipkite dėmesį į konkrečių duomenų šaltinių ir operacijų delegavimo apribojimus ir atitinkamai sukurkite programą, kad pasiektumėte optimalų našumą.
Pastaba.
Ne visos funkcijos yra perduodamos. Sužinokite daugiau apie perdavimą Užklausų apribojimai: Delegavimo ir užklausų apribojimai.
Delegavimas turi keletą privalumų, tokių kaip užklausų optimizavimas ir didelių duomenų rinkinių palaikymas. 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. Išnagrinėkite toliau pateiktą pavyzdį. 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ų, fiksuodami duomenis šaltinyje.
Apdorojimas serveryje
Skirtingi duomenų šaltiniai, pvz., SQL ir Dataverse leidžia perduoti duomenų apdorojimą, pvz., filtrus ir peržvalgas, duomenų šaltiniui. Programoje SQL Server galite kurti rodinius, apibrėžtus užklausa. 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
Optimizavus programos užklausų duomenis galima žymiai sutrumpinti įkėlimo laiką ir pagerinti bendrą reagavimą.
Naudokite aiškų stulpelio pasirinkimą
Aiškaus stulpelio pasirinkimo (ECS) funkcija pagal numatytuosius nustatymus įjungta visose naujose programose. Jei programa neįjungta, į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 nustatyti, kad jie naudojami. Norėdami priversti ECS palikti trūkstamą stulpelį, naudokite "Power Fx" išraišką ShowColumns po rinkinio nuorodos arba valdiklyje.
Venkite skambinti "Power Automate", kad užpildytumėte rinkinį
Įprasta praktika yra naudoti "Power Automate" rinkiniams gauti ir užpildyti "Power Apps". Nors šis požiūris galioja, yra situacijų, kai tai gali būti ne pats efektyviausias pasirinkimas. Skambinant "Power Automate" pridedama tinklo delsa ir 0,6 sekundės našumo sąnaudos, kad būtų galima sukurti "Power Automate" srautą.
Pernelyg didelis "Power Automate" srautų naudojimas taip pat gali lemti vykdymo apribojimus ir ribojimą. 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 šios problemos gali kilti našumo problemų, nes kiekviena papildoma užklausa patiria papildomų išlaidų.
Toks paprastas iškvietimas rinkiniui įkelti gali generuoti N+1 iškvietimus į 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 Server, kad išvengtumėte N+1 užklausos problemos, arba pakeiskite vartotojo sąsają, kad nesuaktyvintumėte N+1 scenarijaus.
Dataverse Automatiškai gauna reikiamus susijusių lentelių duomenis ir galite pasirinkti stulpelius iš susijusių lentelių.
ThisItem.Account.'Account Name'
Jei RelatedDataSource dydis mažas (mažiau nei 500 įrašų), talpykloje laikykite jį rinkinyje ir naudokite rinkinį peržvalgos (N+1) užklausos scenarijui valdyti.
Apribokite pakuotės dydį
Nors "Power Apps" optimizuoja programų įkėlimą, galite imtis veiksmų, kad sumažintumėte programų pėdsaką. Mažesnis plotas ypač svarbus senesnių įrenginių naudotojams arba naudotojams lokalėse, kuriose yra didesnė delsa arba mažesnis pralaidumas.
Įvertinkite į programą įdėtą mediją. Jei kažkas nenaudojama, ištrinkite jį.
Pavyzdžiui, įdėtieji vaizdai gali būti per dideli. Vietoj PNG failų pažiūrėkite, ar galite naudoti SVG vaizdus. Būkite atsargūs naudodami tekstą SVG vaizduose, nes šriftas turi būti įdiegtas kliente. 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 palengvina kelių žmonių darbą su programomis vienu metu ir riboja "sprogimo spindulį" (testavimo kiekį), kai norint pakeisti programą reikia atlikti visą bandomąjį leidimą.
Optimizuoti "ForAll"
Funkcija ForAll Power Apps naudojama įrašų lentelei kartoti ir kiekvienam įrašui taikyti formulę arba formulių rinkinį. Nors pati funkcija yra universali, netinkamas funkcijos naudojimas ForAll gali greitai padaryti programą mažiau našią.
Funkcija ForAll yra vienaskaitos nuosekli funkcija, o ne lygiagreti funkcija. Todėl vienu metu peržiūri tik vieną įrašą, gauna rezultatą ir pereina prie kito įrašo, kol peržiūri visus aprėpties įrašus.
Venkite lizdų ForAll. Ši praktika gali sukelti eksponentines iteracijas ir reikšmingai paveikti našumą.
ClearCollect(FollowUpMeetingAttendees.ForAll(ForAll(Distinct(AttendeesList.EmailAddress.Address).Lookup(Attendees))))
Paketinis duomenų bazės naujinimas
Galite naudoti ForAll ir Patch paketiniu būdu atnaujinti duomenų bazę. Tačiau būkite atsargūs, kai naudojate tvarką ForAll ir Patch.
Ši funkcija yra geresnis būdas, pavyzdžiui:
Patch(SampleFoodSalesData, ForAll(colSampleFoodSales,
{
demoName:"fromCanvas2"
})
);
kadangi šis metodas yra mažiau veiksmingas:
ForAll(colSampleFoodSales, Patch(SampleFoodSalesData,
{
demoName:"test"
})
);