Kopīgot, izmantojot


Koda optimizācija

Tā kā audekla lietotnes attīstās, lai apmierinātu dažādas biznesa vajadzības, ir ļoti svarīgi saglabāt optimālu veiktspēju. Datu apstrāde, lietotāja interfeisa noformēšana un lietotņu funkcionalitāte prasa rūpīgu pieeju koda optimizācijai.

Tā kā audekla programmas kļūst sarežģītākas, var rasties problēmas ar datu izgūšanu, formulu sarežģītību un renderēšanas ātrumu. Lai līdzsvarotu spēcīgu funkcionalitāti ar atsaucīgu lietotāja interfeisu, izmantojiet sistemātisku pieeju koda optimizācijai.

Power Fx formulu optimizācija

Šajā sadaļā ir sniegta labākā prakse Power Fx formulu optimizēšanai.

Ar funkciju

Funkcija With novērtē viena ieraksta formulu. Formula var aprēķināt vērtību vai veikt darbības, piemēram, modificēt datus vai strādāt ar savienojumu. Izmantojiet With , lai padarītu sarežģītas formulas vieglāk lasāmas, sadalot tās mazākās nosauktās apakšformulās. Šīs nosauktās vērtības darbojas kā vienkārši lokālie mainīgie, kas ir ierobežoti ar darbības jomu With. With ir labāks par kontekstu vai globālajiem mainīgajiem, jo tas ir patstāvīgs, viegli saprotams un darbojas jebkurā deklaratīvā formulu kontekstā. Uzziniet vairāk par funkciju Ar.

Power Fx formulas ekrānuzņēmums, kurā tiek izmantota funkcija With.

Vienlaicīga funkcija

Funkcija Concurrent ļauj vienlaikus novērtēt vairākas formulas vienā rekvizītā, ja tām ir savienotāja vai Dataverse izsaukumi. Parasti vairākas formulas tiek novērtētas vienlaicīgi, kad tās ķēdējat ar ; (semikolu) operatoru. Ar Concurrent lietojumprogrammu novērtē visas rekvizīta formulas vienlaicīgi, pat pēc operatora ; izmantošanas. Šī vienlaicīgība nozīmē, ka lietotāji gaida mazāk laika uz rezultātiem. Ja datu zvani netiek sākti līdz iepriekšējo zvanu beigām, lietotne gaida visu pieprasījumu laiku summu. Ja datu zvani tiek sākti vienlaicīgi, lietotne gaida tikai ilgāko pieprasījuma laiku. Uzziniet vairāk par funkciju Concurrent.

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

Koaleses 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 netukšas virknes vērtības. Ja visi argumenti ir tukši vai tukši virkni, funkcija atgriež tukšu. Coalesce ir labs veids, kā pārvērst tukšas virknes tukšās vērtībās. Uzziniet vairāk par funkciju Coalesce.

Šis piemērs prasa value1 un value2 ir jāizvērtē divas reizes:

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

Šo funkciju var samazināt līdz:

Coalesce(value1, value2)

Funkcija IsMatch

Funkcija IsMatch pārbauda, vai teksta virkne atbilst modelim, kas sastāv no parastām rakstzīmēm, iepriekš definētiem rakstiem vai regulāras izteiksmes. Uzziniet vairāk par funkciju IsMatch.

Piemēram, šī formula atbilst United States 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

Audekla OnStart programmu rekvizītam ir izšķiroša nozīme, definējot darbības, kas notiek, palaižot programmu. Š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. Izprotiet un efektīvi izmantojiet rekvizītu, OnStart lai izveidotu adaptīvas un efektīvas audekla programmas.

Racionalizējiet App.OnStart funkciju, migrējot mainīgo iestatījumus uz nosauktām formulām. Nosauktās formulas, īpaši tās, kas konfigurētas programmas dzīves cikla sākumā, ir 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. Papildinformāciju skatiet sadaļā Lielu un sarežģītu audekla programmu izveide.

Piezīmes

Īpašums OnStart ir obligāts. Tas ir sakārtots saraksts ar darbiem, kas jāveic, pirms parādās pirmais ekrāns. 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 pārkārtošanu un atlikšanu optimizācijas, kas citādi varētu tikt veiktas.

Sākuma ekrāns

Ja App.OnStart tajā ir funkcijas Navigate izsaukums, pat ja tas ir If funkcijā un tiek izsaukts reti, programmai ir jāpabeidz izpilde App.OnStart , pirms tiek parādīts programmas pirmais ekrāns.  App.StartScreen ir deklaratīvs veids, kā norādīt, kurš ekrāns ir jāparāda vispirms, un tas nebloķē optimizācijas.

Rekvizīta StartScreen iestatīšana parāda, ka pirmais ekrāns pirms App.OnStart tam ir pabeigts. App.StartScreen Paziņo, kurš ekrāna objekts jāparāda vispirms, neprasot iepriekšēju apstrādi.

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)

Papildinformācija App.StartScreen: deklaratīva alternatīva navigācijai programmā App.OnStart.

Brīdinājums.

Izvairieties no atkarībām starp StartScreen un OnStart. Atsauce uz nosauktu formulu, kas savukārt atsaucas uz globālo mainīgo, var izraisīt sacensību nosacījumu, kas StartScreen netiek lietots pareizi.

Neveidojiet atkarības starp StartScreen un .OnStart Kamēr programma bloķē atsauces uz globālajiem StartScreenmainīgajiem , varat atsaukties uz nosauktu formulu, kas savukārt atsaucas uz globālo mainīgo. Šī pieeja var izraisīt sacensību nosacījumu, kurā tas netiek lietots StartScreen pareizi.

Nosauktās formulas

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

Nosauktās formulas palīdz arī deklarēt programmu dizainus. Veidojot uzņēmuma programmas, bieži vēlaties, lai programmai būtu kopīgi dizaini, kas nodrošina konsekventu izskatu un lietotāja pieredzi. Lai izveidotu dizainu, ir jādeklarē desmitiem līdz simtiem mainīgo lielumu .App.OnStart Šī deklarācija palielina koda garumu un programmas 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, varat pārvietot tālāk norādīto kodu uz App.OnStartApp.Formulas, kas samazina 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 šādiem:

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 iestatīšana Lookups. Šeit ir nepieciešamas izmaiņas Lookup formulā, lai iegūtu lietotāja informāciju no Office 365, nevis Dataverse. Izmaiņas jāveic tikai vienā vietā, 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āgojamība attiecas uz pārslēgšanos no tabulas Dataverse lietotāji uz Office 365 savienotāju, neveicot izmaiņas formulās, kas izkaisītas visā programmā.

Vēl viena pieeja ir optimizēt countRows.

varListItems = CountRows(SampleList)

Izmantojot Set šo funkciju, mainīgais ir varListItems jāinicializē ar sākotnējo rindu skaitu paraugu sarakstā un jāiestata vēlreiz pēc saraksta elementu pievienošanas vai noņemšanas. Izmantojot nosauktas formulas, mainoties datiem, varListItems mainīgais tiek automātiski atjaunināts.

Rekvizīta nosauktās App.Formulas formulas nodrošina elastīgāku un deklaratīvāku pieeju vērtību un aprēķinu pārvaldībai visā programmā. Tie piedāvā priekšrocības laika neatkarības, automātisko atjauninājumu, uzturēšanas un nemainīgu definīciju ziņā, salīdzinot ar paļaušanos tikai uz App.OnStart.

Aspekts Nosauktās formulas (App.Formulas) App.OnStart
Laika neatkarība Formulas ir pieejamas uzreiz, un tās var aprēķināt jebkurā secībā. Mainīgie var radīt laika atkarības, kas ietekmē 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ētiem mainīgajiem var būt nepieciešams atrast un atjaunināt vairākās vietās.
Nemainīgas definīcijas Formulu definīcijas ir App.Formulas 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 programmā Power Apps Studio ļauj izveidot savas pielāgotās funkcijas.

Definējiet formulu App.Formulas šādi:

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

Kods darbojas šādi:

  • FunctionName Izsauc funkciju.

  • Parameter ir ievades nosaukums. Varat iekļaut vienu vai vairākas ievades.

  • DataType ir datu tips, kuram jāatbilst funkcijā nodotajam argumentam. Pieejamie datu tipi ir Būla, Krāsa, Datums, Datums, Laiks, Dinamisks, GUID, Hipersaite, Teksts un Laiks.

  • OutputDataType ir funkcijas izvades datu tips.

  • Formula ir funkcijas izvade.

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

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

Izsaukt definēto funkciju no teksta vai etiķetes vadīklas.

calcAreaOfCircle(Int(*TextInput1*.Text))

Optimizēt mainīgos lielumus

Mainīgie definē un iestatī vietējās un globālās vērtības, ko izmantojat visā lietotnē. Lai gan tie ir ērti, pārāk daudz mainīgo lielumu izmantošana var padarīt lietotni mazāk efektīvu.

Tālāk sniegtajā piemērā ir parādīts, kā iestatīt mainīgo 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);

Efektīvāka pieeja ir izmantot īpašumu tikai tad, 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 pārsniedz vienu ekrānu, konteksta mainīgos izmantojiet globālos mainīgos.

Pārāk daudz neizmantoto mainīgo palielina atmiņas patēriņu un var palēnināt programmu inicializāciju. Resursi tiek piešķirti šiem mainīgajiem lielumiem pat tad, ja tos neizmantojat. Neizmantotie mainīgie lielumi arī palielina jūsu lietotnes loģikas sarežģītību. Uzturiet savu Power App tīru un organizētu, lai nodrošinātu labāku veiktspēju un vieglāku izstrādi.

Kolekciju optimizēšana

Kolekcijas ir pagaidu datu storage struktūras, ko izmantojat, lai glabātu un manipulētu ar datiem Power Apps programmā. Tomēr iekasēšana var izraisīt veiktspējas pieskaitāmās izmaksas. Ierobežojiet kolekciju izmantošanu un izmantojiet tās tikai tad, ja nepieciešams.

// 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 šo pieeju, strādājot ar kolekcijām:

  • Ierobežojiet kolekciju lielumu un skaitu. Tā kā kolekcijas ir lokālas programmai, tās tiek glabātas mobilās ierīces atmiņā. Jo vairāk datu kolekciju glabājas vai jo vairāk kolekciju izmantojat, jo sliktāka ir veiktspēja. Izmantojiet funkciju ShowColumns , lai iegūtu tikai noteiktas kolonnas. Pievienojiet funkciju Filter , lai iegūtu tikai attiecīgos datus.

    Tālāk sniegtajā funkcijas piemērā tiek atgriezta visa datu kopa:

    ClearCollect(colDemoAccount, Accounts);
    

    Salīdziniet šo funkciju ar šo kodu, kas atgriež tikai noteiktus ierakstus un kolonnas:

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

    Šajā piemērā tiek atgriezta šāda datu kopa:

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

  • Iestatiet datu avota atsvaidzes biežumu. Ja kolekcijai pievienojat jaunus ierakstus, atsvaidziniet tos vai apkopojiet tajā, lai iegūtu jaunos vai mainītos ierakstus. Ja vairāki lietotāji atjaunina datu avotu, atsvaidziniet kolekciju, 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 ir tabulas mainīgais, kurā tiek glabātas datu rindas un kolonnas, nevis tikai viens datu vienums. Kolekcijas ir noderīgas divu galveno iemeslu dēļ: datu apkopošana pirms nosūtīšanas uz datu avotu un informācijas kešatmiņa, lai izvairītos no biežiem vaicājumiem. Tā kā kolekcijas atbilst datu avota un Power Apps tabulas struktūrai, tās ļauj efektīvi mijiedarboties ar datiem pat bezsaistē.

// 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 multivides un mainīgie var būtiski neietekmēt lietotnes veiktspēju, ir svarīgi tīrīt lietotni, noņemot visus neizmantotos multivides vai mainīgos.

  • Neizmantotie multivides faili palielina lietotnes lielumu, kas var palēnināt lietotnes ielādes laiku.

  • Neizmantotie mainīgie palielina atmiņas lietojumu un var nedaudz palēnināt programmu inicializāciju. Resursi tiek piešķirti šiem mainīgajiem lielumiem pat tad, ja tie netiek izmantoti. Pārāk daudz neizmantoto mainīgo var arī padarīt lietotnes loģiku sarežģītāku.

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

Optimizējiet ekrānus un vadīklas

Lai optimizētu ekrānus un vadīklas pakalpojumā Power Apps, ņemiet vērā tālāk norādīto paraugpraksi.

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. Šī pieeja var piespiest lietotni ielādēt citus ekrānus, nevis gaidīt, kamēr lietotājs pāriet uz šo ekrānu. Lai atrisinātu šo problēmu, izmantojiet mainīgos, kolekcijas un navigācijas kontekstu, lai koplietotu stāvokli dažādos ekrānos.

Lietojumprogrammu pārbaudītājs pakalpojumā Power Apps Studio 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.

Nākamajā attēlā vadīkla Galerija 1 ir salīdzināta ar 2. ekrāna vadīklu Etiķete 2.

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

Ja otrajā ekrānā atsaucaties uz vadīklu no programmas pirmā ekrāna, veiktspēja netiek sasniegta, jo pirmais ekrāns jau ir ielādēts. Šāda rīcība patiesībā ir izdevīga, jo lietotne ir deklaratīva, nevis izmanto mainīgos.

Ja atsaucaties uz vadīklām, kas vēl nav ielādētas, piemēram, pirmais ekrāns, kurā ir atsauce uz vadīklu, kas nosaukta Label 3 no 3. ekrāna, programma ielādē šo ekrānu atmiņā.

Iespējot DelayOutput teksta vadīklām

Iestatījums DelayOutput, ja tas ir iestatīts uz true, reģistrē lietotāja ievadi pēc pussekundes aizkaves. Šī aizkave ir noderīga, lai atliktu dārgas operācijas, līdz lietotājs pabeidz ievadīt tekstu, piemēram, filtrēšanu, kad ievade tiek izmantota citās formulās.

Piemēram, aplūkojiet galeriju, kuras vienumi tiek filtrēti atkarībā no tā, ko lietotājs ievada vadīklā TextInput:

  • Ja iestatāt DelayOutput vērtību false , kas ir noklusējums, galerija tiek filtrēta, tiklīdz tiek ievadīts teksts. Ja jums ir galerija ar daudziem vienumiem, galerijas atkārtota ielādēšana ar izmaiņām uzreiz palēnina veiktspēju. Labāk gaidīt. Šī darbība ir praktiska, ja izmantojat TextInput meklēšanas virkni vai StartsWith funkciju.

  • Ja iestatāt DelayOutput vērtību true, ir neliela aizkave, pirms izmaiņas tiek noteiktas. Šī aizkave nodrošina laiku, lai pabeigtu rakstīšanu. Kavēšanās labi darbojas ar TextInput.OnChange īpašumu. Ja jums ir darbības, kas saistītas ar izmaiņām, nevēlaties, lai tās tiktu aktivizētas, kamēr neesat pabeidzis rakstīt laukā.

Deleģēšana un apstrāde servera pusē

Izmantojot deleģēšanu un servera puses apstrādi, programma var efektīvi apstrādāt lielas datu kopas, pārvietojot operācijas uz datu avotu.

Deleģēšana

Deleģēšana pakalpojumā Power Apps attiecas uz programmas spēju pārvietot noteiktas operācijas uz pamatā esošo datu avotu, nevis apstrādāt darbības pašā Power Apps. Izmantojot deleģēšanu Power Apps, varat izveidot efektīvākas un mērogojamākas lietojumprogrammas, kas labi darbojas pat scenārijos, kuros ir iesaistītas lielas datu kopas. Ņemiet vērā deleģēšanas ierobežojumus konkrētiem datu avotiem un operācijām un attiecīgi noformējiet programmu, lai sasniegtu optimālu veiktspēju.

Piezīmes

Ne visas funkcijas ir deleģējamas. Papildinformāciju par deleģēšanu skatiet sadaļā Vaicājumu ierobežojumi: deleģēšana un vaicājumu ierobežojumi.

Deleģēšanai ir vairākas priekšrocības, piemēram, vaicājumu optimizācija un lielu datu kopu atbalsts. 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 šķist ērti izveidot kolekcijas, veicot savienojumus audekla lietotnē. Aplūkojiet šādu piemēru. Piemērā ir divas tabulas: Vadītāji un Kravas automašīnas. Kods izveido vadītāju un kravas automašīnas detaļu kolekciju, un katrai kravas automašīnai tas izsauc vadītāju, kuram pieder kravas automašīna.

// 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 šādu pievienošanos audekla lietotnē, var tikt ģenerēti daudzi zvani uz datu avotu, kas noved pie lēnas ielādes laika.

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āllaika scenārijā ielādes laiku var samazināt no piecām minūtēm līdz mazāk nekā 10 sekundēm, fiksējot datus avotā.

Servera puses apstrāde

Dažādi datu avoti, piemēram, SQL un Dataverse, ļauj deleģēt datu apstrādi, piemēram, filtrus un uzmeklēšanas, datu avotam. Programmā SQL Server var izveidot vaicājuma definētus skatus. Varat Dataverse izveidot zema koda spraudņus, lai apstrādātu datus serverī un atgrieztu tikai gala rezultātus savā audekla lietotnē.

Datu apstrādes deleģēšana serverim var uzlabot veiktspēju, samazināt klienta puses kodu un atvieglot lietotnes uzturēšanu.

Uzziniet vairāk par spraudņiem Dataverse.

Vaicājuma datu modeļu optimizēšana

Optimizējot to, kā lietotne vaicā datus, var ievērojami samazināt ielādes laiku un uzlabot vispārējo reaģētspēju.

Skaidras kolonnas atlases izmantošana

Skaidras kolonnu atlases (ECS) funkcija pēc noklusējuma ir ieslēgta visās jaunajās lietotnēs. Ja tā nav ieslēgta jūsu lietotnē, ieslēdziet to. ECS automātiski samazina izgūto kolonnu skaitu tikai uz tām, kas tiek izmantotas lietotnē. Ja ECS nav ieslēgts, iespējams, saņemsiet vairāk datu, nekā nepieciešams, un tas var ietekmēt veiktspēju. Dažreiz, kad programma iegūst datus, izmantojot kolekcijas, kolonnas sākotnējais avots var tikt zaudēts. ECS nomet kolonnas, ja nevar noteikt, ka tās tiek izmantotas. Lai piespiestu ECS saglabāt trūkstošo kolonnu, izmantojiet Power Fx izteiksmi ShowColumns pēc kolekcijas atsauces vai vadīklā.

Izvairīšanās no Power Automate izsaukšanas, lai aizpildītu kolekciju

Izplatīta prakse ir izmantot Power Automate, lai iegūtu un aizpildītu kolekcijas pakalpojumā Power Apps. Lai gan šī pieeja ir derīga, ir situācijas, kad tā var nebūt visefektīvākā izvēle. Izsaucot Power Automate, tiek pievienots tīkla latentums un 0,6 sekunžu veiktspējas izmaksas, lai instancētu Power Automate plūsmu.

Power Automate plūsmu pārmērīga izmantošana var izraisīt arī izpildes ierobežojumus un ierobežojumus. Vienmēr novē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 datu bāzes vaicājumos, kur tā vietā, lai iegūtu visus nepieciešamos datus vienā vaicājumā, tiek veikti vairāki papildu vaicājumi, lai izgūtu saistītos datus. Šī problēma var izraisīt veiktspējas problēmas, jo katram papildu vaicājumam rodas pieskaitāmās izmaksas.

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 programmu un galeriju kontekstā N+1 problēma var rasties, strādājot ar datu avotiem un galerijām, kas parāda saistītos ierakstus. Problēma parasti rodas, ja tiek veikti vairāk vaicājumu par katru galerijā redzamo vienumu, kā rezultātā rodas veiktspējas vājās vietas.

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

Dataverse Automātiski iegūst saistīto tabulu nepieciešamos datus, un jūs varat atlasīt kolonnas no saistītajām tabulām.

ThisItem.Account.'Account Name'

Ja RelatedDataSource lielums ir mazs (mazāk nekā 500 ierakstu), saglabājiet to kešatmiņā kolekcijā un izmantojiet kolekciju, lai vadītu uzmeklēšanas (N+1) vaicājuma scenāriju.

Ierobežojiet iepakojuma lielumu

Lai gan Power Apps optimizē programmu ielādi, varat veikt darbības, lai samazinātu savu programmu nospiedumu. Samazināts nospiedums ir īpaši svarīgs vecāku ierīču lietotājiem vai lietotājiem vietās, kur ir lielāks latentums vai mazāks joslas platums.

  • Novērtējiet lietotnē iegulto multividi. Ja kaut kas netiek izmantots, izdzēsiet to.

    Piemēram, iegultie attēli var būt pārāk lieli. PNG failu vietā pārbaudiet, vai varat izmantot SVG attēlus. Esiet piesardzīgs, izmantojot tekstu SVG attēlos, jo fonts ir jāinstalē klientā. Risinājums, kad ir jāparāda teksts, ir teksta etiķetes uzlikšana virs attēla.

  • Izvērtējiet, vai izšķirtspēja ir piemērota formas faktoram. Mobilās lietotnes izšķirtspējai nav jābūt tik augstai kā datora lietotnes izšķirtspējai. Eksperimentējiet, lai iegūtu pareizo līdzsvaru starp attēla kvalitāti un izmēru.

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

  • Izvērtējiet, vai mēģināt vienā programmā ievietot pārāk daudz darbplūsmu. Piemēram, vai vienā lietotnē ir gan administratora ekrāni, gan klientu ekrāni? Ja tā, apsveriet iespēju tos sadalīt atsevišķās lietotnēs. Šī pieeja arī atvieglo vairāku cilvēku darbu ar lietotnēm vienlaicīgi, un tā ierobežo "sprādziena rādiusu" (testēšanas apjomu), kad lietotņu izmaiņām ir nepieciešama pilna testa kārta.

Optimizēt ForAll

Funkcija ForAll Power Apps tiek izmantota, lai atkārtotu ierakstu tabulu un katram ierakstam lietotu formulu vai formulu kopu. Lai gan pati funkcija ir daudzpusīga, nepareiza funkcijas izmantošana ForAll var ātri padarīt jūsu lietotni mazāk veiktspējīgu.

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 nākamo ierakstu, līdz tas iziet cauri visiem tā tvēruma ierakstiem.

Izvairieties no ligzdošanas ForAll. Šī prakse 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 pakešu atjaunināšana

Datu bāzi var izmantot ForAll un Patch atjaunināt sērijveidā. Tomēr esiet piesardzīgs, lietojot secību ForAll un Patch.

Šāda funkcija ir labāka pieeja, piemēram:

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

tā kā šāda pieeja ir mazāk efektīva:

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

Nākamā darbība