Kopīgot, izmantojot


Koda optimizācija

Tā kā audekla lietotnes attīstās, lai atbilstu dažādām biznesa prasībām, optimālas veiktspējas uzturēšanas izaicinājums kļūst par kritisku apsvērumu. Datu apstrādes, lietotāja interfeisa dizaina un audekla lietotņu funkcionalitātes sarežģītība prasa niansētu pieeju koda optimizācijai.

Tā kā audekla lietotnes kļūst sarežģītākas, izstrādātāji saskaras ar problēmām, kas saistītas ar datu izgūšanu, formulu sarežģītību un renderēšanas ātrumu. Nepieciešamība panākt līdzsvaru starp stabilu funkcionalitāti un atsaucīgām lietotāja saskarnēm uzsver, cik svarīgi ir pieņemt sistemātisku pieeju koda optimizācijai.

Power Fx Formulu optimizācija

Ar funkciju

Funkcija With novērtē viena ieraksta formulu. Formula var aprēķināt vērtību un/vai veikt darbības, piemēram, pārveidot datus vai strādāt ar savienojumu. Izmantojiet Ar, lai uzlabotu sarežģītu formulu lasāmību, sadalot to mazākās nosauktās apakšformulās. Šīs nosauktās vērtības darbojas kā vienkārši lokālie mainīgie, kas aprobežojas ar Ar tvērumu. Ar priekšroka tiek dota priekšroka konteksta vai globālajiem mainīgajiem, jo tā ir autonoma, viegli saprotama un to var izmantot jebkurā deklaratīvās formulas kontekstā. Uzziniet vairāk par funkciju With .

Ekrānuzņēmums ar Power Fx formulu, kurā tiek izmantota funkcija With

Vienlaicīga funkcija

Funkcija Concurrent ļauj vienlaicīgi novērtēt vairākas vienā rekvizītā norādītās formulas, ja tām ir savienotājs vai Dataverse izsaukumi. Parasti vairākas formulas tiek novērtētas, saķēdot tās kopā ar ; (semikolu) operatoru, kas novērtē katru formulu secīgi. Izmantojot funkciju Concurrent , lietotne vienlaicīgi novērtēs visas īpašības formulas pat pēc operatora ; izmantošanas. Šī vienlaicīgība palīdz lietotājiem gaidīt mazāk to pašu rezultātu. Ja datu izsaukumi netiek palaisti līdz iepriekšējo izsaukumu beigām, programmai ir jāgaida uz visu pieprasījuma laiku summu. Ja datu izsaukumi sākas vienlaicīgi, programmai ir jāgaida vienīgi ilgākais pieprasījuma laiks. Uzziniet vairāk par funkciju Concurrent .

Concurrent(
    ClearCollect(colAccounts1, Accounts),
    ClearCollect(colUsers1, Users),
    ClearCollect(colEnvDef1, 'Environment Variable Definitions'),
    ClearCollect(colEnvVal1, 'Environment Variable Values')
);

Saplūst funkcija

Funkcija Coalesce novērtē argumentus secībā un atgriež pirmo vērtību, kas nav tukša vai tukša virkne. Izmantojiet šo funkciju, lai aizstātu tukšu vērtību vai tukšu virkni ar citu vērtību, bet nemainītas netukšas un tukšas virknes vērtības. Ja visi argumenti ir tukši vai tukši virkņi, funkcija atgriež tukšu, padarot Coalesce par labu veidu, kā pārvērst tukšas virknes par tukšām vērtībām.

Piemēram:

If(Not IsBlank(value1), value1, Not IsBlank(value2), value2)

Vērtība 1 un vērtība 2 ir jānovērtē divreiz. Šo funkciju var samazināt līdz:

Coalesce(value1, value2)

Funkcija IsMatch

Funkcija IsMatch pārbauda, vai teksta virkne atbilst modelim, kas var ietvert parastas rakstzīmes, iepriekš definētus modeļus vai regulāru izteiksmi. Uzziniet vairāk par funkciju IsMatch .

Piemēram, šī formula atbilst Amerikas Savienoto Valstu sociālās apdrošināšanas numuram:

IsMatch(TextInput1.Text, "\d{3}-\d{2}-\d{4}")

Regulārās izteiksmes skaidrojums:

\\d Atbilst jebkuram ciparam (0-9).

{3} Norāda, ka iepriekšējam ciparu modelim (\d) jāparādās tieši trīs reizes.

- Atbilst defises rakstzīmei.

{2} Norāda, ka iepriekšējam ciparu rakstam (\d) jāparādās tieši divas reizes.

{4} Norāda, ka iepriekšējam ciparu rakstam (\d) jābūt precīzi četras reizes.

Vēl vairāk piemēru IsMatch:

IsMatch(TextInput1.Text, "Hello World")
IsMatch(TextInput1\_2.Text, "(?!^\[0-9\]\\\*$)(?!^\[a-zA-Z\]\\\*$)(\[a-zA-Z0-9\]{8,10})")

Optimizēt lietotni OnStart

Cavas OnStart lietotņu īpašumam ir izšķiroša nozīme, definējot darbības, kas notiek, palaižot lietotni. Šis rekvizīts ļauj lietotņu izstrādātājiem izpildīt globālās inicializācijas uzdevumus, iestatīt mainīgos un veikt darbības, kurām lietotnes startēšanas procesā vajadzētu veikt tikai vienu reizi. Īpašuma OnStart izpratne un efektīva izmantošana ir būtiska, lai izveidotu atsaucīgas un efektīvas audekla lietotnes.

Ieteicamā pieeja ir racionalizēt App.OnStart funkciju, migrējot mainīgo iestatījumus uz nosauktām formulām. Nosauktās formulas, īpaši tās, kas konfigurētas lietotnes dzīves cikla sākumā, izrādās izdevīgas. Šīs formulas apstrādā mainīgo inicializāciju, pamatojoties uz datu zvaniem, nodrošinot tīrāku un organizētāku koda struktūru. Sīkāka informācija Lielu un sarežģītu audekla programmu izveide - Power Apps | Microsoft Learn.

Piezīmes

Īpašums OnStart ir obligāts . Tas ir sakārtots darba saraksts, kas jāveic pirms pirmā ekrāna parādīšanas. Tā kā tas ir tik specifisks ne tikai par to, kas jādara, bet arī par to, kad šis darbs ir jāveic, pamatojoties uz pasūtījumu, tas ierobežo optimizāciju pārkārtošanu un atlikšanu, ko citādi varētu veikt.

Sākuma ekrāns

Ja App.OnStart satur funkcijas izsaukumu Navigate , pat ja tas ir funkcijā If un reti tiek izsaukts, mums ir jāpabeidz lietotnes izpilde. OnStart pirms mēs parādām lietotnes pirmo ekrānu.  App.StartScreen ir jauns deklaratīvs veids, kā norādīt, kurš ekrāns ir jāparāda vispirms, kas nebloķē optimizāciju.

Rekvizīta StartScreen iestatīšana parāda, ka pirmais ekrāns pirms App.OnStart tam ir pabeigts. App.StartScreen declares kuru ekrāna objektu parādīt vispirms bez iepriekšējas apstrādes.

Tā vietā, lai rakstītu kodu kā:

App.OnStart = Collect(OrdersCache, Orders);
If(Param("AdminMode") = "1", Navigate(AdminScreen), Navigate(HomeScreen))

Mainiet kodu uz:

App.OnStart = Collect(OrdersCache, Orders);
App.StartScreen = If(Param("AdminMode") = "1", AdminScreen, HomeScreen)

Sīkāku informāciju skatiet <https://Power Apps.microsoft.com/en-us/blog/app-startscreen-a-new-declarative-alternative-to-navigate-in-app-onstart/> .

Brīdinājums.

Izvairieties no atkarībām starp StartScreen un OnStart. Atsaucoties uz nosauktu formulu, kas savukārt atsaucas uz globālo mainīgo, var rasties sacensību nosacījums, kurā StartScreen netiek piemērots pareizi. Piezīme: mums nevajadzētu būt atkarībām starp StartScreen un OnStart. Mēs bloķējam atsauces uz globālajiem mainīgajiem sākumā, bet mēs varam atsaukties uz nosauktu formulu, kas savukārt atsaucas uz globālo mainīgo, un tas var izraisīt sacensību nosacījumu, kurā StartScreen netiek lietots pareizi.

Nosauktās formulas

Nosauktās formulas ir statiskas vai konstantes, kuras var definēt sadaļā App.Formulas. Kad tie ir deklarēti App.Formulas, tos var izmantot jebkurā lietotnes vietā, un to vērtība vienmēr ir atjaunināta. Nosauktās formulas Power Apps ļauj definēt vērtības vai vērtību kopas, kuras platforma automātiski pārvalda un atjaunina. Šī funkcionalitāte nodod atbildību par vērtības aprēķināšanu un uzturēšanu no izstrādātāja, racionalizējot Power Apps izstrādes procesu. Nosauktās formulas Power Apps ir jaudīga funkcionalitāte, kas var ievērojami uzlabot lietotnes veiktspēju un uzturamību.

Nosauktās formulas var arī adresēt programmu dizainu deklarēšanu. Daudzos gadījumos, kad tiek veidotas uzņēmuma programmas, mēs vēlamies, lai programmai būtu kopīgi dizaini, lai nodrošinātu konsekventu izskatu un lietotāja pieredzi. Lai izveidotu dizainu, ir 10 un 100 mainīgie, kas jādeklarē programmā App OnStart. Tas palielināja programmas koda garumu un inicializācijas laiku.

Mūsdienu vadīklas var arī ievērojami palīdzēt ar dizainu veidošanu un samazināt klientu rakstīto loģiku, lai apstrādātu dizainu. Mūsdienu vadīklas pašlaik ir priekšskatījumā.

Piemēram, šādu kodu App.OnStart var pārvietot uz App.Formulas, tādējādi samazinot globālo mainīgo deklarāciju startēšanas laiku.

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");

Kodu var pārvietot uz App.Formulas šādi:

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";

Vēl viens piemērs ir krodziņa iestatījums Lookups. Šeit ir nepieciešamas izmaiņas uzmeklēšanas formulā, lai iegūtu lietotāja informāciju Office 365. Dataverse Ir tikai viena vieta, kur izmaiņas ir nepieciešamas, nemainot kodu 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');

Šīs formulas iemieso aprēķina būtību. Tie formulē noteikšanas procesu UserEmailUserInfoUserTitle un UserPhone balstās uz citām vērtībām. Šī loģika ir iekapsulēta, ļaujot plaši izmantot visā lietotnē, un to var modificēt atsevišķā vietā. Pielāgošanās spēja attiecas uz pārslēgšanos no tabulas Lietotāji Dataverse uz Office 365 savienotāju, neveicot izmaiņas formulās, kas izkaisītas visā lietotnē.

Vēl viena pieeja ir optimizēt countRows.

varListItems = CountRows(SampleList)

Izmantojot Set funkciju, mainīgais varListItems būs jāinicializē ar sākotnējo rindu skaitu parauga sarakstā un jāiestata vēlreiz pēc saraksta elementu pievienošanas vai noņemšanas. Izmantojot nosauktās formulas, mainoties datiem, varListitems mainīgie tiek automātiski atjaunināti.

Nosauktās formulas īpašumā App.Formulas nodrošina elastīgāku un deklaratīvāku pieeju vērtību un aprēķinu pārvaldībai visā lietotnē, piedāvājot priekšrocības laika neatkarības, automātisku atjauninājumu, uzturamības un nemainīgu definīciju ziņā, salīdzinot ar paļaušanos tikai uz App.OnStart to.

Aspekts Nosauktās formulas (App.Formulas) App.OnStart
Laika neatkarība Formulas ir pieejamas uzreiz, tās var aprēķināt jebkurā secībā. Mainīgie lielumi var ieviest laika atkarību, ietekmējot pieejamību.
Automātiskie atjauninājumi Formulas tiek automātiski atjauninātas, mainoties atkarībām. Mainīgie tiek iestatīti vienu reizi startēšanas laikā; Var būt nepieciešami manuāli atjauninājumi.
Uzturēšanas iespējas Centralizētas formulas vienā vietā uzlabo uzturēšanu. Izkliedēti mainīgie var būt jāatrod un jāatjaunina vairākās vietās.
Nemainīgas definīcijas Formulu definīcijas programmā App.Formulas ir nemainīgas. Mainīgās vērtības var būt jutīgas pret nejaušām izmaiņām.

Lietotāja definētas funkcijas

Lietotāja definētās funkcijas ir eksperimentāla funkcionalitāte Power Apps Authoring Studio, kas ļauj lietotājiem izveidot savu pielāgotu funkciju.

Lai izmantotu šo līdzekli, sadaļā Eksperimentālie iestatījumi atlasiet Jauns analīzes programma un Lietotāja definētā funkcija (UDF)

Definējiet formulu App.Formulas šādi:

FunctionName(Parameter1:DataType1, Parameter2:DataType2):OutputDataType = Formula

Kods darbojas šādi:

  • FunctionName tiek izmantots, lai izsauktu funkciju

  • Parameter ir ievades nosaukums. Ir atļauta viena vai vairākas ievades

  • DataType ir arguments, kas nodots funkcijai, jāatbilst šim datu tipam. Pieejamie datu tipi: Bulāns, Krāsa, Datums, Datums, GUID, Hipersaite, Teksts, Laiks, Netipēts objekts

  • OutputDataType ir datu tips, kurā būs funkcijas izvade.

  • Formula ir funkcijas izvade

// Function to calculate the area of a circle based on the radius
calcAreaOfCircle(radius: Number): Number = 
    IfError(Pi() * radius * radius, 0);

Izmantojiet IfError , lai ieviestu kļūdu apstrādi definētajā funkcijā.

Izsauciet definēto funkciju no teksta/etiķetes vadīklas.

calcAreaOfCircle(Int(*TextInput1*.Text))

Piezīmes

Šī ir eksperimentāla funkcija un var mainīties. Daži datu tipi, piemēram, ieraksti un filtri, vēl netiek atbalstīti.

Optimizēt mainīgos lielumus

Mainīgie tiek izmantoti, lai definētu un iestatītu lokālās un globālās vērtības, kas jāizmanto visur lietotnēs. Lai gan tie ir ērti, pārāk daudz no tiem var izraisīt lietotnes mazāk optimizāciju.

Tālāk sniegtajā piemērā ir parādīta mainīgā iestatīšana katram objekta atribūtam, kas jāizmanto Set katram rekvizītam.

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);

Optimizētāka pieeja ir izmantot īpašumu, kad tas ir nepieciešams:

Set(varEmployee, Office365Users.MyProfile())
"Welcome " & varEmployee.DisplayName

Izmantojiet konteksta mainīgos un globālos mainīgos gudri. Ja mainīgā tvērums paplašinās ārpus viena ekrāna, apsveriet iespēju izmantot globālos mainīgos, nevis konteksta mainīgos.

Pārāk daudz neizmantoto mainīgo veicina atmiņas palielināšanos un nedaudz lēnāku programmu inicializāciju. Tas ir tāpēc, ka resursi tiek piešķirti šiem mainīgajiem, lai gan tie netiek aktīvi izmantoti. Pārāk daudz neizmantoto mainīgo lielumu var izraisīt arī lietotnes loģikas vispārējo sarežģītību. Lai gan neizmantoto mainīgo lielumu ietekme var nebūt smaga, ieteicams uzturēt tīru un labi organizētu Power App, lai nodrošinātu optimālu veiktspēju un izstrādes ērtumu.

Kolekciju optimizēšana

Kolekcijas ir pagaidu datu glabāšanas struktūras, kuras var izmantot, lai glabātu un manipulētu ar datiem programmā Power Apps . Tomēr ir smalka līnija par to, kad iekasēšana var izraisīt veiktspējas pieskaitāmās izmaksas. Tāpēc ierobežojiet kolekciju izmantošanu. Mēģiniet tos izmantot tikai tad, kad tie ir nepieciešami.

// Use this pattern
ClearCollect(colErrors, {Text: gblErrorText, Code: gblErrorCode});

// Do not use this pattern
Clear(colErrors);
Collect(colErrors, {Text: gblErrorText, Code: gblErrorCode});

Lai skaitītu ierakstus lokālajā kolekcijā, izmantojiet CountIf vietējā vietā Count(Filter()).

Apsveriet šos norādījumus, strādājot ar kolekcijām:

Ierobežojiet kolekciju lielumu un skaitu. Tā kā kolekcijas ir lokālas lietotnē, tās tiek glabātas mobilās ierīces atmiņā. Jo vairāk datu ir kolekcijās vai vairāk kolekciju skaita, jo sliktāks ir veiktspēja. Izmantojiet ShowColumns funkciju, lai iegūtu tikai konkrētas kolonnas. Pievienot Filter funkciju, lai iegūtu tikai attiecīgos datus.

Tālāk sniegtā piemēra funkcija atgriež visu datu kopu.

ClearCollect(colDemoAccount, Accounts);

Salīdziniet ar zemāk norādīto kodu, kas atgriezīs tikai konkrētus ierakstus un kolonnas:

ClearCollect(colAcc,
              ShowColumns(
                Filter(Accounts, !IsBlank('Address 1: City')),
                "name","address1_city"))

Piemēra kods atgriež šo datu kopu:

Datu kopas ekrānuzņēmums ar tabulu ar nosaukumu colAcc un divām kolonnām ar datiem, address1_city un nosaukumu

Iestatiet datu avota atsvaidzes biežumu. Ja kolekcijai pievienojat jaunus ierakstus, tas ir jāatsvaidzina vai jāapkopo, lai iegūtu jaunos vai mainītos ierakstus kolekcijā. Ja datu avotu atjaunina vairāki lietotāji, kolekcija ir jāatsvaidzina, lai iegūtu jaunos vai mainītos ierakstus. Vairāk atsvaidzināšanas zvanu nozīmē lielāku mijiedarbību ar serveri.

Kešatmiņas dati kolekcijās un mainīgajos lielumos

Kolekcija, būtībā tabulas mainīgais, atšķiras ar to, ka tajā tiek glabātas datu rindas un kolonnas, nevis viens datu vienums. To lietderība ir divi galvenie mērķi: pirmkārt, apkopot datus pirms pārsūtīšanas uz datu avotu un, otrkārt, informācijas kešatmiņai, novēršot nepieciešamību veikt biežus vaicājumus datu avotam. Tā kā kolekcijas atbilst gan datu avota Power Apps tabulas struktūrai, gan tās piedāvā efektīvu mijiedarbības līdzekli ar datiem pat bezsaistes scenārijos.

// Clear the contents of EmployeeCollection, it already contains data
ClearCollect(
    colEmployee,
    {
        Id: "1",
        Name: "John",
        Department: "IT"
    },
    {
        Id: "2",
        Name: "Nestor",
        Department: "IT"
    }
)

Neizmantoto mainīgo un datu nesēju noņemšana

Lai gan neizmantotie multividei un mainīgie lielumi var neradīt krasu ietekmi uz lietotnes veiktspēju, ir svarīgi notīrīt lietotni no neizmantotajiem multivides vai mainīgajiem.

  • Neizmantotie multivides faili veicina kopējo lietotnes lieluma palielināšanos. Tas var izraisīt lēnāku lietotņu ielādes laiku.

  • Neizmantotie mainīgie veicina lielāku atmiņas lietojumu un nedaudz lēnāku programmu inicializāciju. Tas ir tāpēc, ka resursi tiek piešķirti šiem mainīgajiem, lai gan tie netiek aktīvi izmantoti. Turklāt pārāk daudz neizmantoto mainīgo lielumu var izraisīt lietotnes loģikas vispārējo sarežģītību.

  • Izmantojiet lietotņu pārbaudītāju, lai pārskatītu neizmantotos multivides un mainīgos.

Optimizējiet ekrānus un vadīklas

Izvairieties no savstarpējām atsaucēm uz kontrolēm

Vadīklas, kas atsaucas uz vadīklām citos ekrānos, var palēnināt programmu ielādi un navigāciju. Tas var piespiest lietotni nekavējoties ielādēt citus ekrānus, nevis gaidīt, kamēr lietotājs pārvietojas uz šo ekrānu. Lai novērstu šo problēmu, izmantojiet mainīgos, kolekcijas un navigācijas kontekstu, lai koplietotu stāvokli dažādos ekrānos.

Power Apps Programmu pārbaudītājs autorēšanas studijā rāda vadīklas, uz kurām ir savstarpējas atsauces. Regulāri pārskatiet lietotņu pārbaudītāju, lai novērstu šo problēmu.

Tālāk ir sniegts salīdzinājumu vadīklu piemērs. Zemāk esošajā attēlā 1. galerijas vadīklas ir savstarpējas atsauces 2. ekrāna 2. etiķetes vadīklā.

Ekrānuzņēmums, kurā redzama Power Apps Studio vadīkla ar savstarpējām atsaucēm

Ja otrajā ekrānā atsaucaties uz vadīklu no programmas pirmā ekrāna, veiktspēja netiks trāpīta, jo pirmais ekrāns jau ir ielādēts, un tas faktiski var būt laba lieta, jo lietotne deklaratīva, nevis izmanto mainīgos.

Ja atsaucējaties uz vadīklām, kas vēl nav ielādētas, piemēram, uz pirmo ekrānu, kas atsaucas uz vadīklu, kas nosaukta Label 3 no 3. ekrāna, ekrānam būs jāielādē atmiņā.

Iespējot DelayOutput teksta vadīklām

Aizkavēšanās izvades iestatījums Ja iestatīts uz true, lietotāja ievade tiek reģistrēta pēc pussekundes aizkavēšanās. Noderīga, lai aizkavētu dārgas darbības, līdz lietotājs pabeidz teksta ievadīšanu, piemēram, filtrēšanu, kad ievade tiek izmantota citās formulās.

Piemēram, galerijai, kuras vienumi tiek filtrēti atkarībā no tā, kas tiek ievadīts vadīklā TextInput:

  • Ja DelayOutput ir iestatīts uz false, kas ir noklusējums, galerija tiek filtrēta, tiklīdz tiek ierakstīts teksts. Ja jums ir galerija ar daudziem priekšmetiem, uzreiz pārlādējot galeriju ar izmaiņām, palēninās veiktspēja; būtu izdevīgāk nedaudz pagaidīt. Tas ir praktiski, ja meklēšanas virknei izmantojat TextInput (skatiet sadaļu Meklēšana vai jaunās funkcijas StartsWith).

  • Ja DelayOutput ir iestatīts uz true, ir otra aizkavēšanās, pirms izmaiņas tiek atklātas. Tas tiek darīts, lai dotu laiku pabeigt rakstīšanu vēlamo. Aizkave darbojas labi, ja to izmanto, lai palīdzētu rekvizītam TextInput.OnChange. Ja jums ir darbības, kas saistītas ar izmaiņām, jūs nevēlaties, lai tās tiktu aktivizētas, kamēr laukā nav ievadīts viss, ko vēlaties.

Deleģēšana un servera puses apstrāde

Deleģēšana

Deleģēšana Power Apps ir jēdziens, kas attiecas uz programmas spēju pārsūtīt noteiktas darbības uz pamatā esošo datu avotu, nevis apstrādāt operācijas Power Apps sevī. Izmantojot deleģēšanu Power Apps, izstrādātāji var izveidot efektīvākas un mērogojamākas lietojumprogrammas, kas labi darbojas pat scenārijos, kuros ir iekļautas lielas datu kopas. Ir svarīgi apzināties deleģēšanas ierobežojumus konkrētiem datu avotiem un darbībām un attiecīgi izstrādāt programmas, lai sasniegtu optimālu veiktspēju.

! [PIEZĪME] Ne visas funkcijas ir deleģējamas. Lūdzu, skatiet sadaļu Izpratne par deleģēšanu , lai uzzinātu vairāk par deleģēšanu.

Deleģēšanai ir vairākas priekšrocības, piemēram, vaicājumu optimizācija un pievieno atbalstu lielām datu kopām. Turklāt, ja avota dati bieži mainās, deleģēšana palīdz atjaunināt datus.

API zvanu samazināšana datu avotam

Dažreiz var būt ērti vienkārši ievērot kodēšanas praksi, piemēram, kolekciju izveidi, veicot savienojumus audekla lietotnē. Skatiet zemāk norādīto kodu:

Šajā piemērā ir divas tabulas, Vadītāji un Kravas automašīnas. Izstrādātājs raksta kodu, lai izveidotu vadītāju un kravas automašīnu detaļu kolekciju, un katrai kravas automašīnai viņi zvana autovadītājus, kuriem pieder kravas automašīnas.

// 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)));

Veicot šādas pievienošanās operācijas audekla lietotnē, var tikt ģenerēti daudzi zvani uz datu avotu, kā rezultātā ielādes laiks ir ļoti lēns.

Labāka pieeja ir:

// 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'
    )
)

Reālā laika scenārijā ir iespējams samazināt ielādes laiku no 5 minūtēm līdz mazāk nekā 10 sekundēm, vienkārši koriģējot datus datu avota līmenī.

Servera puses apstrāde

Dažādi datu avoti, piemēram, SQL, un Dataverse ļauj deleģēt datu apstrādi, piemēram, filtru un uzmeklēšanu, datu avotam. SQL Server lietotāji var izveidot skatus, kuru saturs ir definēts vaicājumā. Līdzīgi, lietotāji Dataverse var izveidot zema koda spraudņus, lai rakstītu loģiku datu apstrādei servera pusē un iegūtu gala rezultātus tikai audekla lietotnēs.

Datu apstrādes deleģēšana serverim var uzlabot vispārējo veiktspēju, samazināt kodu klienta pusē un ir viegli uzturēta.

Uzziniet vairāk par spraudņiem Dataverse.

Vaicājuma datu modeļu optimizēšana

Skaidras kolonnas atlases izmantošana

Skaidras kolonnu atlases (ECS) funkcija pēc noklusējuma ir iespējota visām jaunajām lietotnēm. Ja tas nav iespējots jūsu lietotnei, jums tas ir jāiespējo. ECS automātiski samazina izgūto kolonnu skaitu līdz tikai tām, kas tiek izmantotas lietojumprogrammā. Ja ECS nav iespējots, iespējams, tiek izgūts vairāk datu nekā nepieciešams, kas var ietekmēt veiktspēju. Reizēm, kad lietotne ievāc datus no kolekcijām, kolonnas sākotnējā izcelsme vai avots var tikt zaudēta. Mēs nezinām, vai tas tiek izmantots, un mēs to atmetam, izmantojot ECS. Parasti ECS var piespiest strādāt ar trūkstošu kolonnu, izmantojot PowerFx izteiksmi ShowColumns pēc kolekcijas atsauces vai izmantojot to vadīklā.

Izvairieties no Power Automate izsaukšanas, lai aizpildītu kolekciju

Bieži vien kolekciju ielādei un aizpildīšanai tiek izmantota Power Automate Power Apps. Lai gan šī pieeja ir pamatota, pastāv situācijas, kad tā var nebūt visefektīvākā izvēle. Izsaukšana Power Automate ir saistīta ar tīkla latentuma papildu slodzi un 0,6 sekunžu veiktspējas izmaksām, lai izveidotu Power Automate plūsmu.

Pārmērīga plūsmu Power Automate izmantošana var izraisīt arī izpildes ierobežojumus un ātruma samazināšanu. Tāpēc vienmēr izvērtējiet kompromisus starp tīkla latentumu un veiktspējas izmaksām.

Novērst N+1 problēmu

N+1 problēma ir izplatīta problēma datubāzes vaicājumos, kur visu nepieciešamo datu iegūšanai vienā vaicājumā tiek veikti vairāki papildu vaicājumi, lai iegūtu saistītus datus. Tas var radīt veiktspējas problēmas, jo katrs papildu vaicājums rada papildu slodzi.

Vienkāršs izsaukums, piemēram, šis, lai ielādētu kolekciju, var ģenerēt N+1 izsaukumus uz datu avotu.

ClearCollect(MyCollection, OrdersList,
    {
        LookUp(CustomersList,CustomerID = OrdersList[@CustomerID])
    }
)

Audekla lietotņu un galeriju kontekstā N+1 problēma var rasties, strādājot ar datu avotiem un galerijām, kurās tiek rādīti saistīti ieraksti. Problēma parasti rodas, ja katram galerijā redzamajam elementam tiek veikts vairāk vaicājumu, kā rezultātā rodas veiktspējas sastrēgums.

Izmantojiet View objektus SQL Server, lai izvairītos no N+1 vaicājuma problēmas, vai mainiet lietotāja saskarni, lai izvairītos no N+1 scenārija aktivizēšanas.

Dataverse automātiski ielādē nepieciešamos datus no saistītajām tabulām, un jūs varat atlasīt kolonnas no saistītajām tabulām.

ThisItem.Account.'Account Name'

Ja RelatedDataSource` izmērs ir mazs (<500 ieraksti), varat to saglabāt kešatmiņā kolekcijā un izmantot kolekciju, lai vadītu uzmeklēšanas (N+1) vaicājuma scenāriju.

Iepakojuma lieluma ierobežošana

Lai gan Power Apps tas ievērojami optimizē lietotņu ielādi, varat veikt pasākumus, lai samazinātu lietotņu ietekmi. Samazināta aizņemtā vieta ir īpaši svarīga vecāku ierīču lietotājiem vai lietotājiem lokalizācijās ar lielāku latentumu vai samazinātu joslas platumu.

  • Novērtējiet savā lietotnē iegultos multivides failus. Ja kaut kas netiek izmantots, izdzēsiet to.

  • Iegultie attēli, iespējams, ir pārāk lieli. PNG failu vietā pārbaudiet, vai varat izmantot SVG attēlus. Tomēr esiet uzmanīgi, lietojot tekstu SVG attēlos, jo izmantotais fonts būs jāinstalē klienta datorā. Lielisks risinājums, ja nepieciešams parādīt tekstu, ir uzlikt teksta etiķeti virs attēla.

  • Novērtējiet, vai izšķirtspēja ir piemērota formas faktoram. Mobilās lietotnes izšķirtspējai nav jābūt tikpat augstai kā darbvirsmas lietotnes izšķirtspējai. Eksperimentējiet, lai iegūtu pareizo attēla kvalitātes un izmēra līdzsvaru.

  • Ja jums ir neizmantoti ekrāni, izdzēsiet tos. Esiet uzmanīgi, lai neizdzēstu slēptos ekrānus, ko izmanto tikai lietotņu veidotāji vai administratori.

  • Izvērtējiet, vai mēģināt vienā lietotnē ietilpināt pārāk daudz darbplūsmu. Piemēram, vai vienā lietotnē ir gan administratora ekrāni, gan klienta ekrāni? Ja tā, apsveriet iespēju tos sadalīt atsevišķās lietotnēs. Šī pieeja arī atvieglos vairāku cilvēku vienlaicīgu darbu ar lietotnēm un ierobežos "eksplozijas rādiusu" (testēšanas apjomu), kad lietotņu izmaiņām ir nepieciešama pilnīga testa sekmīga nokārtošana.

Optimizēt visiem

Funkcija **tabulā** tiek izmantota, lai atkārtoti pārskatītu ierakstu tabulu un katram ierakstam lietotu formulu vai formulu kopu. ForAll Power Apps Lai gan pati funkcija ir daudzpusīga, nepareiza ForAll funkcijas izmantošana var ātri samazināt lietotnes veiktspēju.

Funkcija ForAll ir vienskaitļa secīga funkcija, nevis vienlaicīga funkcija. Tāpēc tas vienlaikus aplūko tikai vienu ierakstu, iegūst rezultātu un pēc tam turpina ar nākamo, līdz ir izskatījis visus ierakstus savā darbības jomā.

Izvairieties no ligzdošanas visiem (ForAll) par katru cenu. Tas var izraisīt eksponenciālas iterācijas un būtiski ietekmēt veiktspēju.

ClearCollect(FollowUpMeetingAttendees.ForAll(ForAll(Distinct(AttendeesList.EmailAddress.Address).Lookup(Attendees))))

Datu bāzes partijas atjauninājumi

ForAll + Patch var būt viena no pieejām datubāzes partijveida atjaunināšanai. Tomēr esiet uzmanīgi, lietojot “For All” un “Patch” secību.

Šāda funkcija:

Patch(SampleFoodSalesData, ForAll(colSampleFoodSales,
    {
        demoName:"fromCanvas2"
    })
);

Ir labāka veiktspēja nekā:

ForAll(colSampleFoodSales, Patch(SampleFoodSalesData,
    {
        demoName:"test"
    })
);

Nākamā darbība