Dijeli putem


Optimizacija koda

Kako se aplikacije radnog područja razvijaju kako bi zadovoljile različite poslovne potrebe, održavanje optimalnih performansi je ključno. Rukovanje podacima, dizajn korisničkog sučelja i funkcionalnost aplikacije zahtijevaju pažljiv pristup optimizaciji koda.

Kako canvas aplikacije postaju složenije, možete naići na probleme s dohvaćanjem podataka, složenošću formula i brzinom renderiranja. Kako biste uskladili snažnu funkcionalnost s responzivnim korisničkim sučeljem, koristite sustavan pristup optimizaciji koda.

Optimizacija Power Fx formula

Ovaj odjeljak pruža najbolje prakse za optimizaciju Power Fx formula.

S funkcijom

Funkcija With procjenjuje formulu za jedan zapis. Formula može izračunati vrijednost ili izvesti akcije, kao što je izmjena podataka ili rad s vezom. Koristi se With za lakše čitanje složenih formula dijeljenjem na manje imenovane podformule. Ove imenovane vrijednosti djeluju kao jednostavne lokalne varijable ograničene na opseg With. With je bolja od konteksta ili globalnih varijabli jer je samostalna, lako razumljiva i funkcionira u bilo kojem deklarativnom kontekstu formule. Saznajte više o funkciji With.

Snimka zaslona Power FX formule koja koristi funkciju With.

Istodobna funkcija

Funkcija Concurrent omogućuje istovremeno evaluiranje više formula u istom svojstvu ako imaju konektor ili Dataverse pozive. Obično se više formula procjenjuje u isto vrijeme kada ih umrežite s operatorom ; (točka sa zarezom). S Concurrent, aplikacija procjenjuje sve formule u svojstvu u isto vrijeme, čak i nakon korištenja operatora ; . Ova konkurentnost znači da korisnici manje čekaju na rezultate. Kada podatkovni pozivi ne započnu dok prethodni pozivi ne završe, aplikacija čeka zbroj svih vremena zahtjeva. Ako podatkovni pozivi započnu u isto vrijeme, aplikacija čeka samo najdulje vrijeme zahtjeva. Saznajte više o funkciji Concurrent.

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

Funkcija spajanja

Funkcija Coalesce procjenjuje svoje argumente redoslijedom i vraća prvu vrijednost koja nije prazna ili prazan niz. Koristite ovu funkciju da biste zamijenili praznu vrijednost ili prazan niz drugom vrijednošću, ali ostavite neprazne i neprazne vrijednosti niza nepromijenjene. Ako su svi argumenti prazni ili prazni nizovi, funkcija vraća prazno. Coalesce dobar je način za pretvaranje praznih nizova u prazne vrijednosti. Saznajte više o funkciji Coalesce.

Ovaj primjer zahtijeva value1 i value2 treba se evaluirati dvaput:

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

Ova se funkcija može smanjiti na:

Coalesce(value1, value2)

Funkcija IsMatch

Funkcija IsMatch provjerava odgovara li tekstni niz uzorku koji se sastoji od običnih znakova, unaprijed definiranih uzoraka ili regularnog izraza. Saznajte više o funkciji IsMatch.

Na primjer, ova formula odgovara broju socijalnog osiguranja United States:

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

Objašnjenje regularnog izraza:

  • \\d Podudara se s bilo kojom znamenkom (0-9).

  • {3} Određuje da se prethodni uzorak znamenki (\d) treba pojaviti točno tri puta.

  • - Podudara se sa znakom crtice.

  • {2} Određuje da se prethodni uzorak znamenke (\d) treba pojaviti točno dva puta.

  • {4} Određuje da se prethodni uzorak znamenke (\d) treba pojaviti točno četiri puta.

Više primjera IsMatch:

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

Optimizirajte aplikaciju OnStart

Svojstvo OnStart canvas aplikacija igra ključnu ulogu u definiranju radnji koje se događaju prilikom pokretanja aplikacije. Ovo svojstvo razvojnim inženjerima aplikacija omogućuje izvršavanje zadataka globalne inicijalizacije, postavljanje varijabli i izvođenje radnji koje bi se trebale dogoditi samo jednom tijekom postupka pokretanja aplikacije. Razumjeti i učinkovito koristiti ovo vlasništvo OnStart za stvaranje responzivnih i učinkovitih canvas aplikacija.

Pojednostavite App.OnStart funkciju migracijom postavki varijabli na imenovane formule. Imenovane formule, posebno one konfigurirane rano u životnom ciklusu aplikacije, su prednost. Ove formule obrađuju inicijalizaciju varijabli na temelju poziva podataka, pružajući čišću i organiziraniju strukturu vašeg koda. Saznajte više u Izradi velikih i složenih canvas aplikacija.

Napomena

Svojstvo OnStart je imperativ. To je uređeni popis poslova koje treba obaviti prije nego što se pojavi prvi ekran. Budući da je toliko specifičan ne samo oko onoga što treba napraviti, već i kada taj posao mora biti obavljen prema redoslijedu, ograničava preuređivanje i odgađanje optimizacija koje bi inače bile napravljene.

Početni zaslon

Ako App.OnStart sadrži Navigate poziv funkcije, čak i ako je u funkciji If i rijetko se poziva, aplikacija mora dovršiti izvršavanje prije App.OnStart nego što prikaže prvi ekran aplikacije.  App.StartScreen je deklarativni način da se označi koji ekran treba biti prikazan prvi i ne blokira optimizacije.

Postavljanje StartScreen svojstva prikazuje prvi zaslon prije App.OnStart dovršenja. App.StartScreen određuje koji će se zaslonski objekt prikazati prvi bez potrebe za prethodnom obradom.

Umjesto pisanja koda poput:

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

Promijenite kôd u:

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

Više informacija: App.StartScreen: deklarativna alternativa za navigaciju u App.OnStart.

Upozorenje

Izbjegavajte ovisnosti između StartScreen i OnStart. Referenciranje imenovane formule koja pak referencira globalnu varijablu može uzrokovati uvjet utrke u kojem StartScreen se ne primjenjuje ispravno.

Nemojte stvarati ovisnosti između StartScreen i OnStart. Dok aplikacija blokira referenciranje globalnih varijabli u StartScreen, možete referencirati imenovanu formulu, koja zatim referira na globalnu varijablu. Ovaj pristup može uzrokovati uvjet utrke u kojem se ne StartScreen primjenjuje ispravno.

Imenovane formule

Imenovane formule su statične ili konstante koje se mogu definirati u .App.Formulas Nakon što se deklariraju u App.Formulas, mogu se koristiti bilo gdje u aplikaciji, a njihove vrijednosti uvijek ostaju ažurirane. Imenovane formule u Power Apps-u omogućuju vam definiranje vrijednosti ili skupova vrijednosti koje platforma automatski upravlja i ažurira. Ova funkcionalnost prebacuje odgovornost za izračun vrijednosti i održavanje s programera na Power Apps, pojednostavljujući proces razvoja. Imenovane formule u Power Apps-u moćna su značajka koja može značajno poboljšati performanse i održivost aplikacija.

Imenovane formule također pomažu pri deklaraciji tema aplikacija. Kada izrađujete poslovne aplikacije, često želite da aplikacija ima zajedničke teme koje pružaju dosljedan izgled i korisničko iskustvo. Za kreiranje teme potrebno je deklarirati desetke do stotine varijabli u App.OnStart. Ova deklaracija povećava duljinu koda i vrijeme inicijalizacije aplikacije.

Moderne kontrole također mogu značajno pomoći s temama i pomoći u smanjenju logike koju je pisao korisnik za rukovanje temama. Moderne kontrole trenutno su u pretpregledu.

Na primjer, sljedeći kod možete premjestiti na App.OnStartApp.Formulas, što smanjuje vrijeme pokretanja globalnih deklaracija varijabli.

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 možete premjestiti na App.Formulas sljedeći način:

BoardSize = 70;
BoardLight = RGBA(240,217,181, 1);
BoardDark = RGBA(181,136,99, 1);
BoardSelect = RGBA(34,177,76,1);
BoardRowWidth = 10;                      // expected 8 plus two guard characters for regular expressions
BoardMetadata = 8 \* BoardRowWidth + 1;   // which player is next, have pieces moved for castling rules, etc.
BoardBlank = "----------------------------------------------------------------\_00000000000000";
BoardClassic = "RNBQKBNR\_\_PPPPPPPP------------------------\_--------\_\_pppppppp\_\_rnbqkbnr\_\_0000000000";

Još jedan primjer je u postavljanju Lookups. Ovdje je potrebna promjena u Lookup formuli kako bi se korisničke informacije dobile iz Office 365 umjesto iz Dataversea. Trebaš napraviti promjenu samo na jednom mjestu, bez mijenjanja koda svugdje.

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

Ove formule utjelovljuju bit izračuna. Oni artikuliraju proces određivanja UserEmailUserInfoUserTitle i UserPhone na temelju drugih vrijednosti. Ova je logika inkapsulirana, što omogućuje široku upotrebu u cijeloj aplikaciji i može se mijenjati na jedinstvenom mjestu. Prilagodljivost se proteže i na prelazak s tablice Dataverse Users na Office 365 konektor bez potrebe za izmjenama formula raspoređenih po aplikaciji.

Drugi pristup je optimizacija countRows.

varListItems = CountRows(SampleList)

Funkcijom Set morate inicijalizirati varijablu varListItems s početnim brojem redaka u uzorku popisa i ponovno je postaviti nakon što se stavke popisa dodaju ili uklone. Kod imenovanih formula, kako se podaci mijenjaju, varijabla varListItems se automatski ažurira.

Imenovane formule u App.Formulas svojstvu pružaju fleksibilniji i deklarativniji pristup upravljanju vrijednostima i izračunima kroz cijelu aplikaciju. Nude prednosti u pogledu neovisnosti o vremenu, automatskih ažuriranja, održivosti i nepromjenjivih definicija u usporedbi s oslanjanjem isključivo na App.OnStart.

Aspekt Imenovane formule (App.Formulas) App.OnStart
Vremenska neovisnost Formule su dostupne odmah i mogu se izračunati u bilo kojem redoslijedu. Varijable mogu uvesti vremenske ovisnosti koje utječu na dostupnost.
Automatska ažuriranja Formule se automatski ažuriraju kada se ovisnosti promijene. Varijable se postavljaju jednom tijekom pokretanja; Možda će biti potrebna ručna ažuriranja.
Održivost Centralizirane formule na jednom mjestu poboljšavaju održavanje. Raspršene varijable mogu zahtijevati pronalaženje i ažuriranje na više mjesta.
Nepromjenjive definicije Definicije formula u su App.Formulas nepromjenjive. Vrijednosti varijabli mogu biti podložne slučajnim promjenama.

Korisnički definirane funkcije

Korisnički definirane funkcije u Power Apps Studiju omogućuju vam stvaranje vlastitih prilagođenih funkcija.

Definirajte formulu na App.Formulas sljedeći način:

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

Kod funkcionira na sljedeći način:

  • FunctionName poziva funkciju.

  • Parameter je naziv ulaza. Možete uključiti jedan ili više ulaza.

  • DataType je tip podataka kojem argument prenesen u funkciju mora odgovarati. Dostupni tipovi podataka uključuju Boolean, Color, Date, Datetime, Dynamic, GUID, Hyperlink, Text i Time.

  • OutputDataType je tip podataka za izlaz funkcije.

  • Formula je izlaz funkcije.

Koristite IfError za implementaciju rukovanja pogreškama unutar definirane funkcije:

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

Pozovite definiranu funkciju iz kontrole teksta ili oznake.

calcAreaOfCircle(Int(*TextInput1*.Text))

Optimizirajte varijable

Varijable definiraju i postavljaju lokalne i globalne vrijednosti koje upotrebljavate u cijeloj aplikaciji. Iako su praktične, upotreba previše varijabli može učiniti vašu aplikaciju manje učinkovitom.

Sljedeći primjer pokazuje kako postaviti varijablu za svaki atribut objekta, što zahtijeva korištenje Set za svako svojstvo.

Set(varEmpName, Office365Users.MyProfile().DisplayName);
Set(varEmpCity, Office365Users.MyProfile().City);
Set(varEmpPhone, Office365Users.MyProfile().BusinessPhones);
Set(varEmpUPN, Office365Users.MyProfile().UserPrincipalName);
Set(varEmpMgrName, Office365Users.ManagerV2(varEmpUPN).DisplayName);

Učinkovitiji pristup je korištenje nekretnine samo kada vam je potrebna:

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

Mudro koristite kontekstne varijable i globalne varijable. Ako opseg varijable nadilazi jedan zaslon, koristite globalne varijable umjesto varijabli konteksta.

Previše neiskorištenih varijabli povećava upotrebu memorije i može usporiti inicijalizaciju aplikacije. Resursi se dodjeljuju za te varijable čak i ako ih ne koristite. Neiskorištene varijable također povećavaju složenost logike vaše aplikacije. Održavajte svoju Power App čistom i organiziranom za bolje performanse i lakši razvoj.

Optimizirajte zbirke

Kolekcije su privremene strukture za storage podataka koje koristite za pohranu i manipulaciju podacima u Power Apps aplikaciji. Međutim, naplate mogu uzrokovati opterećenje u performansama. Ograničite upotrebu zbirki i koristite ih samo kada je to potrebno.

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

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

Da biste prebrojali zapise u lokalnoj zbirci, koristite CountIf umjesto Count(Filter()).

Razmotrite ovaj pristup pri radu s kolekcijama:

  • Ograničite veličinu i broj zbirki. Budući da su zbirke lokalne za aplikaciju, pohranjuju se u memoriju mobilnog uređaja. Što više zbirki podataka sadrži ili što više zbirki koristite, to je lošija izvedba. Koristite funkciju ShowColumns da biste dobili samo određene stupce. Dodajte funkciju Filter da biste dobili samo relevantne podatke.

    Sljedeći primjer funkcije vraća cijeli skup podataka:

    ClearCollect(colDemoAccount, Accounts);
    

    Usporedite ovu funkciju sa sljedećim kodom, koji vraća samo određene zapise i stupce:

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

    Ovaj primjer vraća sljedeći skup podataka:

    Snimka zaslona skupa podataka s tablicom nazvanom colAcc i dva stupca, address1_city i imenom.

  • Postavite učestalost osvježavanja izvora podataka. Ako u zbirku dodate nove zapise, osvježite je ili prikupite da biste dobili nove ili promijenjene zapise. Ako više korisnika ažurira izvor podataka, osvježite zbirku da biste dobili nove ili promijenjene zapise. Više poziva za osvježavanje znači više interakcije s poslužiteljem.

Predmemoriranje podataka u zbirkama i varijablama

Zbirka je varijabla tablice koja pohranjuje retke i stupce podataka, a ne samo jednu stavku podataka. Zbirke su korisne iz dva glavna razloga: agregiranje podataka prije slanja u izvor podataka i predmemoriranje informacija kako bi se izbjegli česti upiti. Budući da kolekcije odgovaraju tabličnoj strukturi izvora podataka i Power Apps-a, omogućuju vam učinkovitu interakciju s podacima, čak i kad ste offline.

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

Uklanjanje neiskorištenih varijabli i medija

Iako neiskorišteni mediji i varijable možda neće značajno utjecati na performanse aplikacije, važno je očistiti aplikaciju uklanjanjem svih neiskorištenih medija ili varijabli.

  • Neiskorištene medijske datoteke povećavaju veličinu aplikacije, što može usporiti vrijeme učitavanja aplikacije.

  • Neiskorištene varijable povećavaju korištenje memorije i mogu malo usporiti inicijalizaciju aplikacije. Resursi se dodjeljuju za te varijable čak i ako se ne koriste. Previše neiskorištenih varijabli također može zakomplicirati logiku aplikacije.

  • Koristite alat za provjeru aplikacija za pregled neiskorištenih medija i varijabli.

Optimizirajte zaslone i kontrole

Za optimizaciju zaslona i kontrola u Power Apps-u, razmotrite sljedeće najbolje prakse.

Izbjegavanje kontrola unakrsnog upućivanja

Kontrole koje upućuju na kontrole na drugim zaslonima mogu usporiti učitavanje aplikacija i navigaciju. Ovaj pristup može prisiliti aplikaciju da učita ostale ekrane umjesto da čeka da korisnik ode na taj ekran. Za rješavanje ovog problema, koristite varijable, kolekcije i kontekst navigacije za dijeljenje stanja preko ekrana.

App checker u Power Apps Studiju prikazuje kontrole koje su međusobno referencirane. Redovito pregledavajte alat za provjeru aplikacija kako biste riješili ovaj problem.

Na sljedećoj slici, kontrola Gallery 1 je međusobno referencirana u Screen 2, Label 2 kontroli.

Snimka zaslona Power Apps Studija koja prikazuje unakrsno referenciranu kontrolu.

Ako referenciraš kontrolu s prvog ekrana u aplikaciji na drugom ekranu, nema pada na performanse jer je prvi ekran već učitan. Ovo ponašanje je zapravo korisno jer je aplikacija deklarativna, a ne koristi varijable.

Ako referencirate kontrole koje još nisu učitane, poput prvog ekrana koji referencira kontrolu nazvanu Label 3 s ekrana 3, aplikacija učitava taj ekran u memoriju.

Omogućivanje DelayOutput za kontrole teksta

Postavka DelayOutput , kada je postavljena na true, registrira korisnički unos nakon pola sekunde kašnjenja. Ovo kašnjenje korisno je za odgađanje skupih operacija dok korisnik ne završi unos teksta, poput filtriranja kada se unos koristi u drugim formulama.

Na primjer, razmotrimo galeriju čije su stavke filtrirane ovisno o tome što korisnik unese u kontrolu TextInput:

  • Ako postaviš DelayOutput na false, što je zadana postavka, galerija filtrira čim se upiše bilo koji tekst. Ako imate galeriju s mnogo predmeta, odmah ponovno učitavanje galerije s promjenama usporava performanse. Bolje je pričekati. Ovo ponašanje je praktično kada koristite funkciju TextInput za pretragu ili funkciju StartsWith .

  • Ako postavite DelayOutput na true, postoji kratko kašnjenje prije nego što se promjene detektiraju. Ovo kašnjenje daje vrijeme za dovršetak tipkanja. Kašnjenje dobro funkcionira s nekretninom TextInput.OnChange . Ako imate akcije vezane uz promjene, ne želite da se aktiviraju dok ne završite s upisivanjem u polju.

Delegiranje i obrada na strani poslužitelja

Korištenje delegiranja i obrade na strani poslužitelja omogućuje vašoj aplikaciji učinkovito rukovanje velikim skupovima podataka preusmjeravanjem operacija na izvor podataka.

Delegacija

Delegiranje u Power Apps-u odnosi se na sposobnost aplikacije da određene operacije prebaci na izvorni izvor podataka umjesto da ih obrađuje unutar samog Power Apps-a. Korištenjem delegiranja u Power Apps-u možete stvoriti učinkovitije i skalabilnije aplikacije koje dobro rade čak i u scenarijima s velikim skupovima podataka. Budite svjesni ograničenja delegiranja za određene izvore podataka i operacije te dizajnirajte svoju aplikaciju u skladu s tim kako biste postigli optimalne performanse.

Napomena

Nisu sve funkcije prenosive. Saznajte više o delegiranju u Ograničenja upita: Ograničenja delegiranja i upita.

Delegiranje ima nekoliko prednosti, poput optimizacije upita i podrške za velike skupove podataka. Osim toga, ako se izvorni podaci često mijenjaju, delegiranje pomaže u održavanju podataka ažurnima.

Smanjite API pozive na izvor podataka

Ponekad se može činiti prikladnim stvarati kolekcije izvođenjem spajanja unutar aplikacije radnog područja. Razmotrite sljedeći primjer. U primjeru postoje dvije tablice: Vozači i Kamioni. Kôd stvara zbirku vozača i podataka o kamionu, a za svaki kamion poziva vozača koji je vlasnik kamiona.

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

Izvođenje takvog spajanja u aplikaciji radnog područja može generirati mnogo poziva izvoru podataka, što dovodi do sporog vremena učitavanja.

Bolji pristup je:

// Good code
Set(
    varTruckData,
    LookUp(
        Drivers,
        'Dummy ID' = ThisRecord.'Dummy ID',
        'Driver First Name'
    ) & LookUp(
        Drivers,
        'Dummy ID' = ThisRecord.'Dummy ID',
        'Driver Last Name'
        )
);

Set(
    varTruckData,
    With(
        {
            vDriver: LookUp(
                Drivers,
                'Dummy ID' = ThisRecord.'Dummy ID'
            )
        },
        vDriver.'Driver First Name' & vDriver.'Driver Last Name'
    )
)

U stvarnom vremenu možete smanjiti vrijeme učitavanja s pet na manje od 10 sekundi fiksiranjem podataka na izvoru.

Obrada na strani poslužitelja

Različiti izvori podataka, kao što su SQL i Dataverse, omogućuju delegiranje obrade podataka, kao što su filtri i pretraživanja, izvoru podataka. U SQL Server-u možete kreirati prikaze definirane upitom. Unutra Dataverse možete stvoriti dodatke s niskim kodom za obradu podataka na poslužitelju i vratiti samo konačne rezultate u aplikaciju radnog područja.

Delegiranje obrade podataka poslužitelju može poboljšati performanse, smanjiti kod na strani klijenta i olakšati održavanje aplikacije.

Saznajte više o dodacima u Dataverse.

Optimiziranje uzoraka podataka upita

Optimizacija načina na koji vaša aplikacija upituje podatke može značajno smanjiti vrijeme učitavanja i poboljšati ukupnu responzivnost.

Korištenje eksplicitnog odabira stupaca

Značajka eksplicitnog odabira stupaca (ECS) uključena je prema zadanim postavkama za sve nove aplikacije. Ako nije uključen u tvojoj aplikaciji, uključi ga. ECS automatski smanjuje broj dohvaćenih stupaca samo na one koji se koriste u aplikaciji. Ako ECS nije uključen, možda ćete dobiti više podataka nego što vam je potrebno, što može utjecati na performanse. Ponekad, kada aplikacija dobije podatke putem zbirki, izvorni izvor stupca može se izgubiti. ECS uklanja stupce ako ne može utvrditi da su korišteni. Da biste prisilili ECS da zadrži nedostajući stupac, koristite izraz ShowColumns Power Fx nakon reference kolekcije ili u kontroli.

Izbjegavajte pozivanje Power Automate za popunjavanje kolekcije

Uobičajena praksa je korištenje Power Automate za dohvaćanje i popunjavanje kolekcija u Power Apps-u. Iako je ovaj pristup valjan, postoje situacije u kojima možda nije najučinkovitiji izbor. Pozivanje Power Automate dodaje mrežnu latenciju i trošak performansi od 0,6 sekundi za pokretanje Power Automate procesa.

Prekomjerna upotreba Power Automate tokova također može dovesti do ograničenja izvršavanja i usporavanja. Uvijek procijenite kompromise između latencije mreže i troškova performansi.

Uklonite problem N+1

Problem N+1 čest je problem u upitima baze podataka gdje se, umjesto dohvaćanja svih potrebnih podataka u jednom upitu, vrši više dodatnih upita za dohvaćanje povezanih podataka. Ovaj problem može dovesti do problema s performansama, jer svaki dodatni upit donosi dodatne troškove.

Jednostavan poziv poput ovog za učitavanje kolekcije može generirati N+1 poziva izvoru podataka:

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

U kontekstu canvas aplikacija i galerija, problem N+1 može se pojaviti pri radu s izvorima podataka i galerijama koje prikazuju povezane zapise. Problem se obično pojavljuje kada se postavi više upita za svaku stavku prikazanu u galeriji, što dovodi do uskog grla performansi.

Koristite View objekte u SQL Server-u kako biste izbjegli problem upita N+1 ili mijenjajte korisničko sučelje kako biste izbjegli pokretanje scenarija N+1.

Dataverse Automatski dohvaća potrebne podatke povezanih tablica i možete odabrati stupce iz povezanih tablica.

ThisItem.Account.'Account Name'

Ako RelatedDataSource je veličina mala (manje od 500 zapisa), spremite ga u kolekciju i koristite kolekciju za pokretanje scenarija upita Lookup (N+1).

Ograničite veličinu pakiranja

Iako Power Apps optimizira učitavanje aplikacija, možete poduzeti korake za smanjenje opterećenja svojih aplikacija. Smanjen otisak posebno je važan za korisnike starijih uređaja ili korisnike u područjima gdje postoji veća latencija ili smanjena propusnost.

  • Procijenite medijske sadržaje ugrađene u vašu aplikaciju. Ako se nešto ne koristi, izbrišite to.

    Na primjer, ugrađene slike mogu biti prevelike. Umjesto PNG datoteka, provjerite možete li koristiti SVG slike. Budite oprezni s korištenjem teksta u SVG slikama jer font mora biti instaliran na klijentu. Zaobilazno rješenje kada trebate prikazati tekst je da preko slike stavite tekstualnu oznaku.

  • Procijenite je li razlučivost prikladna za faktor oblika. Razlučivost za mobilnu aplikaciju ne mora biti tako visoka kao razlučivost za aplikaciju za stolna računala. Eksperimentirajte kako biste postigli pravu ravnotežu kvalitete i veličine slike.

  • Ako imate neiskorištene zaslone, izbrišite ih. Pazite da ne izbrišete skrivene zaslone koje koriste samo proizvođači aplikacija ili administratori.

  • Procijenite pokušavate li uklopiti previše tijekova rada u jednu aplikaciju. Na primjer, imate li i administratorske zaslone i zaslone klijenta u istoj aplikaciji? Ako je tako, razmislite o njihovoj razradi u pojedinačne aplikacije. Ovaj pristup također olakšava rad više osoba na aplikacijama istovremeno i ograničava "blast radius" (količinu testiranja) kada promjene aplikacija zahtijevaju potpuni test prolaz.

Optimiziraj za sve

Funkcija ForAll u Power Apps koristi se za iteraciju kroz tablicu zapisa i primjenu formule ili skupa formula na svaki zapis. Iako je sama funkcija svestrana, nepravilna upotreba ForAll može brzo učiniti vašu aplikaciju manje učinkovitom.

Funkcija ForAll je singularna sekvencijalna funkcija umjesto konkurentne funkcije. Stoga gleda samo jedan zapis u isto vrijeme, dobiva rezultat, a zatim nastavlja na sljedeći zapis dok ne prođe kroz sve zapise u svom opsegu.

Izbjegavajte gniježđenje ForAll. Ova praksa može dovesti do eksponencijalnih iteracija i značajno utjecati na performanse.

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

Masovno ažuriranje baze podataka

Možete koristiti ForAll i Patch za masovno ažuriranje baze podataka. Međutim, budite oprezni kada koristite redoslijed ForAll i Patch.

Sljedeća funkcija je bolji pristup, na primjer:

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

Dok je sljedeći pristup manje učinkovit:

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

Sljedeći korak