Poznámka
Na prístup k tejto stránke sa vyžaduje oprávnenie. Môžete sa skúsiť prihlásiť alebo zmeniť adresáre.
Na prístup k tejto stránke sa vyžaduje oprávnenie. Môžete skúsiť zmeniť adresáre.
Keďže sa aplikácie plátna vyvíjajú, aby spĺňali rôzne obchodné potreby, je udržiavanie optimálneho výkonu kľúčové. Spracovanie údajov, návrh používateľského rozhrania a funkčnosť aplikácie si vyžadujú starostlivý prístup k optimalizácii kódu.
Ako sa canvas aplikácie stávajú zložitejšími, môžete naraziť na problémy s vyhľadávaním dát, zložitosťou vzorcov a rýchlosťou renderovania. Aby ste vyvážili silnú funkcionalitu s responzívnym používateľským rozhraním, použite systematický prístup k optimalizácii kódu.
Optimalizácia vzorcov Power Fx
Táto sekcia poskytuje najlepšie postupy na optimalizáciu Power Fx vzorcov.
S funkciou
Funkcia vyhodnocuje vzorec pre jeden záznam. With Vzorec dokáže vypočítať hodnotu alebo vykonať akcie, ako je úprava údajov alebo práca s pripojením. Na uľahčenie čítania zložitých vzorcov použite With rozdelenie na menšie pomenované podvzorce. Tieto pomenované hodnoty fungujú ako jednoduché lokálne premenné obmedzené na rozsah With.
With je lepší ako kontext alebo globálne premenné, pretože je samostatný, ľahko pochopiteľný a funguje v akomkoľvek deklaratívnom formulovom kontexte. Zistite viac o funkcii With.
Súbežná funkcia
Funkcia Concurrent umožňuje vyhodnocovať viacero vzorcov v tej istej vlastnosti súčasne, ak majú volania konektora alebo Dataverse. Normálne sa viacero vzorcov vyhodnocuje súčasne, keď ich zreťazíte pomocou operátora ; (bodkočiarka). Pomocou operátora Concurrent aplikácia vyhodnocuje všetky vzorce vo vlastnosti súčasne, a to aj po použití operátora ; . Táto súbežnosť znamená, že používatelia čakajú na výsledky kratšie časy. Keď sa dátové hovory nezačnú, kým sa neskončia predchádzajúce hovory, aplikácia čaká na súčet všetkých časov požiadaviek. Ak dátové hovory začnú súčasne, aplikácia čaká iba na najdlhší čas požiadavky. Zistite viac o funkcii súbežnosti.
Concurrent(
ClearCollect(colAccounts1, Accounts),
ClearCollect(colUsers1, Users),
ClearCollect(colEnvDef1, 'Environment Variable Definitions'),
ClearCollect(colEnvVal1, 'Environment Variable Values')
);
Funkcia koalesce
Funkcia Coalesce vyhodnocuje svoje argumenty v poradí a vracia prvú hodnotu, ktorá nie je prázdna alebo nie je prázdny reťazec. Túto funkciu použite na nahradenie prázdnej hodnoty alebo prázdneho reťazca inou hodnotou, ale hodnoty reťazcov, ktoré nie sú prázdne a nie sú prázdne, zostanú nezmenené. Ak sú všetky argumenty prázdne alebo prázdne reťazce, funkcia vráti prázdnu hodnotu.
Coalesce je dobrý spôsob, ako previesť prázdne reťazce na prázdne hodnoty. Zistite viac o funkcii Coalesce.
Tento príklad vyžaduje value1 a value2 musí byť vyhodnotený dvakrát:
If(Not IsBlank(value1), value1, Not IsBlank(value2), value2)
Túto funkciu možno zredukovať na:
Coalesce(value1, value2)
Funkcia IsMatch
Funkcia testuje, či textový reťazec zodpovedá vzoru zloženému z bežných znakov, preddefinovaných vzorov alebo regulárneho výrazu. IsMatch Zistite viac o funkcii IsMatch.
Napríklad tento vzorec zodpovedá číslu sociálneho zabezpečenia United States:
IsMatch(TextInput1.Text, "\d{3}-\d{2}-\d{4}")
Vysvetlenie regulárneho výrazu:
\\dZodpovedá ľubovoľnej číslici (0-9).{3}Určuje, že predchádzajúci číslicový vzor (\d) sa má vyskytnúť presne trikrát.-Zodpovedá znaku pomlčky.{2}Určuje, že predchádzajúci číslicový vzor (\d) sa má vyskytnúť presne dvakrát.{4}Určuje, že predchádzajúci číselný vzor (\d) sa má vyskytnúť presne štyrikrát.
Ďalšie príklady IsMatch:
IsMatch(TextInput1.Text, "Hello World")
IsMatch(TextInput1\_2.Text, "(?!^\[0-9\]\\\*$)(?!^\[a-zA-Z\]\\\*$)(\[a-zA-Z0-9\]{8,10})")
Optimalizácia aplikácie OnStart
Vlastnosť OnStart pre aplikácie na plátne zohráva kľúčovú úlohu pri definovaní akcií, ktoré nastanú pri spustení aplikácie. Táto vlastnosť umožňuje vývojárom aplikácií vykonávať úlohy globálnej inicializácie, nastavovať premenné a vykonávať akcie, ktoré by sa mali vykonať iba raz počas procesu spúšťania aplikácie. Pochopte a efektívne využívajte OnStart túto vlastnosť na vytváranie responzívnych a efektívnych canvas aplikácií.
Zjednodušte funkciu App.OnStart migráciou nastavení premenných do pomenovaných vzorcov. Pomenované vzorce, najmä tie, ktoré sú nakonfigurované na začiatku životného cyklu aplikácie, sú výhodné. Tieto vzorce spracovávajú inicializáciu premenných na základe volaní údajov, čím poskytujú čistejšiu a organizovanejšiu štruktúru vášho kódu. Viac sa dozviete v článku Vytvorte veľké a zložité canvas aplikácie.
Poznámka
Nehnuteľnosť OnStart je nevyhnutná. Je to usporiadaný zoznam práce, ktorú treba urobiť, kým sa objaví prvá obrazovka. Pretože je taký špecifický nielen v tom, čo je potrebné urobiť, ale aj kedy sa táto práca musí vykonať podľa poradia, obmedzuje to možnosti preusporiadania a odkladu optimalizácií, ktoré by inak mohli byť vykonané.
Domovská obrazovka
Ak obsahuje App.OnStart volanie Navigate funkcie, aj keď je v funkcii If a zriedka volané, aplikácia musí dokončiť vykonanie predtým App.OnStart , než sa zobrazí prvá obrazovka aplikácie.
App.StartScreen je deklaratívny spôsob, ako označiť, ktorá obrazovka by sa mala zobraziť ako prvá, a neblokuje optimalizácie.
Nastavenie vlastnosti StartScreen zobrazí prvú obrazovku pred dokončením App.OnStart .
App.StartScreen deklaruje, ktorý objekt obrazovky sa zobrazí ako prvý bez potreby predspracovania.
Namiesto písania kódu ako:
App.OnStart = Collect(OrdersCache, Orders);
If(Param("AdminMode") = "1", Navigate(AdminScreen), Navigate(HomeScreen))
Zmeňte kód na:
App.OnStart = Collect(OrdersCache, Orders);
App.StartScreen = If(Param("AdminMode") = "1", AdminScreen, HomeScreen)
Viac informácií: App.StartScreen: deklaratívna alternatíva k Navigácii v App.OnStart.
Upozornenie
Vyhnite sa závislostiam medzi StartScreen a OnStart. Odkazovanie na pomenovanú formulu, ktorá následne odkazuje na globálnu premennú, môže spôsobiť pretekovú podmienku, v ktorej StartScreen nie je správne aplikovaná.
Nevytvárajte závislosti medzi StartScreen a .OnStart Kým aplikácia blokuje odkazovanie na globálne premenné v StartScreen, môžete odkazovať na pomenovanú formulu, ktorá následne odkazuje na globálnu premennú. Tento prístup môže spôsobiť pretekársku podmienku, pri ktorej sa neaplikuje správne StartScreen .
Pomenované vzorce
Pomenované formuly sú statické alebo konštanty, ktoré možno definovať v App.Formulas. Keď sú deklarované v App.Formulas, môžu byť použité kdekoľvek v aplikácii a ich hodnoty zostávajú vždy aktuálne. Pomenované vzorce v Power Apps vám umožňujú definovať hodnoty alebo súbory hodnôt, ktoré platforma automaticky spravuje a aktualizuje. Táto funkcionalita presúva zodpovednosť za výpočet hodnoty a údržbu z vývojára na Power Apps, čím zefektívňuje vývojový proces. Pomenované vzorce v Power Apps sú výkonnou funkciou, ktorá môže výrazne zlepšiť výkon a udržateľnosť aplikácií.
Pomenované vzorce tiež pomáhajú pri deklarovaní aplikačných tém. Keď vytvárate podnikové aplikácie, často chcete, aby aplikácia mala spoločné témy, ktoré poskytujú konzistentný vzhľad a používateľský zážitok. Na vytvorenie témy musíte deklarovať desiatky až stovky premenných v App.OnStart. Táto deklarácia zvyšuje dĺžku kódu a čas inicializácie aplikácie.
Moderné ovládacie prvky môžu tiež výrazne pomôcť s tvorbou tém a pomôcť znížiť množstvo logiky písanej zákazníkom pri ich spracovaní. Moderné ovládacie prvky sú momentálne v ukážkovej verzii.
Napríklad môžete presunúť nasledujúci kód na App.OnStart , App.Formulasčo skracuje čas štartu pri deklaráciách globálnych premenných.
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");
Kód môžete presunúť nasledovne App.Formulas :
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";
Ďalším príkladom je nastavenie Lookups. Tu je potrebná zmena vo vzorci Lookup na získanie používateľských informácií z Office 365 namiesto Dataverse. Stačí urobiť zmenu na jednom mieste, bez toho, aby ste všade menili kód.
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');
Tieto vzorce stelesňujú podstatu výpočtu. Vysvetľujú proces určovania UserEmail, UserInfo, UserTitle a UserPhone na základe iných hodnôt. Táto logika je zapuzdrená, čo umožňuje široké využitie v celej aplikácii a je možné ju upraviť na jednom mieste. Prispôsobivosť sa rozširuje aj na prepínanie z tabuľky Dataverse Users na konektor Office 365 bez nutnosti meniť vzorce roztrúsené po aplikácii.
Ďalším prístupom je optimalizácia countRows.
varListItems = CountRows(SampleList)
Pomocou Set funkcie musíte inicializovať premennú varListItems s počiatočným počtom riadkov v ukážkovom zozname a nastaviť ju znova po pridaní alebo odstránení položiek zoznamu. Pri pomenovaných formulách sa varListItems premenná automaticky aktualizuje, keď sa údaje menia.
Pomenované vzorce vo App.Formulas vlastnosti poskytujú flexibilnejší a deklaratívnejší prístup na správu hodnôt a výpočtov v celej aplikácii. Ponúkajú výhody v oblasti závislosti od načasovania, automatických aktualizácií, udržiavateľnosti a nemenných definícií v porovnaní so spoliehaním sa výlučne na App.OnStart.
| Aspekt | Pomenované formuly (App.Formulas) | App.OnStart |
|---|---|---|
| Nezávislosť od načasovania | Vzorce sú dostupné okamžite a dajú sa vypočítať v ľubovoľnom poradí. | Premenné môžu zavádzať časové závislosti, ktoré ovplyvňujú dostupnosť. |
| Automatické aktualizácie | Vzorce sa automaticky aktualizujú pri zmene závislostí. | Premenné sa nastavujú raz počas štartu; Možno budú potrebné manuálne aktualizácie. |
| Možnosť údržby | Centralizované receptúry na jednom mieste zlepšujú udržiavateľnosť. | Rozptýlené premenné môžu vyžadovať vyhľadávanie a aktualizáciu na viacerých miestach. |
| Nemenné definície | Definície vzorcov v sú App.Formulas nemenné. |
Hodnoty premenných môžu byť náchylné na náhodné zmeny. |
Používateľom definované funkcie
používateľom definované funkcie v Power Apps Studio vám umožňujú vytvárať vlastné funkcie.
Definujte vzorec v časti App.Formulas následovne:
FunctionName(Parameter1:DataType1, Parameter2:DataType2):OutputDataType = Formula
Kód funguje nasledovne:
FunctionNamevyvoláva funkciu.Parameterje názov vstupu. Môžete zahrnúť jeden alebo viac vstupov.DataTypeje dátový typ, ktorému musí zodpovedať argument vložený do funkcie. Dostupné dátové typy zahŕňajú Boolean, Color, Date, Datetime, Dynamic, GUID, Hypertext, Text a Time.OutputDataTypeje dátový typ pre výstup funkcie.Formulaje výstup funkcie.
Použitie IfError na implementáciu spracovania chýb v definovanej funkcii:
// Function to calculate the area of a circle based on the radius
calcAreaOfCircle(radius: Number): Number =
IfError(Pi() * radius * radius, 0);
Zavolajte definovanú funkciu z textového alebo štítkového ovládania.
calcAreaOfCircle(Int(*TextInput1*.Text))
Optimalizujte premenné
Premenné definujú a nastavujú lokálne a globálne hodnoty, ktoré používate v celej aplikácii. Aj keď sú pohodlné, použitie príliš veľkého množstva premenných môže znížiť efektivitu vašej aplikácie.
Nasledujúci príklad demonštruje, ako nastaviť premennú pre každý atribút objektu, čo vyžaduje použitie Set pre každú nehnuteľnosť.
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ívnejší prístup je používať nehnuteľnosť iba vtedy, keď ju potrebujete:
Set(varEmployee, Office365Users.MyProfile())
"Welcome " & varEmployee.DisplayName
Používajte kontextové a globálne premenné rozumne. Ak rozsah premennej presahuje jednu obrazovku, použite globálne premenné namiesto kontextových premenných.
Príliš veľa nepoužívaných premenných zvyšuje využitie pamäte a môže spomaliť inicializáciu aplikácie. Zdroje sú pridelené pre tieto premenné, aj keď ich nepoužívate. Nepoužité premenné tiež zvyšujú zložitosť logiky vašej aplikácie. Udržiavajte svoju Power App čistú a organizovanú pre lepší výkon a jednoduchší vývoj.
Optimalizácia kolekcií
Kolekcie sú dočasné štruktúry dátového storage, ktoré používate na ukladanie a manipuláciu s dátami v aplikácii Power Apps. Avšak inkaso môže spôsobovať výkonnostné záťaže. Obmedzte používanie kolekcií a používajte ich iba v nevyhnutných prípadoch.
// Use this pattern
ClearCollect(colErrors, {Text: gblErrorText, Code: gblErrorCode});
// Do not use this pattern
Clear(colErrors);
Collect(colErrors, {Text: gblErrorText, Code: gblErrorCode});
Na spočítanie záznamov v lokálnej kolekcii použite namiesto CountIfCount(Filter()).
Pri práci s inkasami zvážte tento prístup:
Obmedzte veľkosť a počet kolekcií. Keďže kolekcie sú lokálne pre aplikáciu, sú uložené v pamäti mobilného zariadenia. Čím viac kolekcií údajov obsahuje alebo čím viac kolekcií používate, tým horší je výkon. Na získanie iba konkrétnych stĺpcov použite funkciu
ShowColumns. Pridajte funkciuFilter, aby ste získali iba relevantné údaje.Nasledujúca príkladová funkcia vráti celú dátovú množinu:
ClearCollect(colDemoAccount, Accounts);Porovnajte túto funkciu s nasledujúcim kódom, ktorý vracia iba konkrétne záznamy a stĺpce:
ClearCollect(colAcc, ShowColumns( Filter(Accounts, !IsBlank('Address 1: City')), "name","address1_city"))Tento príklad vráti nasledujúcu množinu údajov:
Nastavte frekvenciu obnovovania zdroja údajov. Ak do kolekcie pridáte nové záznamy, obnovte ju alebo do nej zhromaždite údaje, aby ste získali nové alebo zmenené záznamy. Ak váš zdroj údajov aktualizuje viacero používateľov, obnovte kolekciu, aby ste získali nové alebo zmenené záznamy. Viac obnovovacích volaní znamená viac interakcie so serverom.
Dáta v vyrovnávacej pamäti v kolekciách a premenných
Kolekcia je tabuľková premenná, ktorá ukladá riadky a stĺpce údajov, nielen jednu dátovú položku. Kolekcie sú užitočné z dvoch hlavných dôvodov: agregácia údajov pred ich odoslaním do zdroja údajov a ukladanie informácií do vyrovnávacej pamäte, aby sa predišlo častým dotazom. Keďže kolekcie zodpovedajú tabuľkovej štruktúre dátového zdroja a Power Apps, umožňujú vám efektívne pracovať s dátami, aj keď 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"
}
)
Odstráňte nepoužívané premenné a médiá
Aj keď nepoužité médiá a premenné nemusia výrazne ovplyvniť výkon aplikácie, je dôležité ju vyčistiť odstránením nevyužitých médií alebo premenných.
Nepoužité mediálne súbory zväčšujú veľkosť aplikácie, čo môže spomaliť jej načítanie.
Nepoužité premenné zvyšujú využitie pamäte a môžu mierne spomaliť inicializáciu aplikácie. Pre tieto premenné sa alokujú zdroje, aj keď sa nepoužívajú. Príliš veľa nepoužívaných premenných môže tiež skomplikovať logiku aplikácie.
Na kontrolu nepoužívaných médií a premenných použite Kontrolu aplikácií.
Optimalizácia obrazoviek a ovládacích prvkov
Na optimalizáciu obrazoviek a ovládacích prvkov v Power Apps zvážte nasledujúce osvedčené postupy.
Vyhnite sa krížovým odkazom na ovládacie prvky
Ovládacie prvky, ktoré odkazujú na ovládacie prvky na iných obrazovkách, môžu spomaliť načítavanie a navigáciu v aplikácii. Tento prístup môže prinútiť aplikáciu načítať ostatné obrazovky namiesto čakania, kým používateľ prejde na tú obrazovku. Na vyriešenie tohto problému použite premenné, kolekcie a navigačný kontext na zdieľanie stavu medzi obrazovkami.
Kontrola aplikácií v Power Apps Studio zobrazuje ovládacie prvky, ktoré sú krížovo referencované. Pravidelne kontrolujte Kontrolu aplikácií, aby ste tento problém vyriešili.
Na nasledujúcom obrázku je ovládanie Galérie 1 prepojené v ovládaní Obrazovka 2, Štítok 2.
Ak sa na druhej obrazovke v aplikácii pozriete na ovládanie z prvej obrazovky, nie je tam žiadny pokles výkonu, pretože prvá obrazovka je už načítaná. Toto správanie je vlastne prospešné, pretože aplikácia je deklaratívna namiesto používania premenných.
Ak sa odvolávate na ovládacie prvky, ktoré ešte nie sú načítané, napríklad prvú obrazovku odkazujúcu na ovládanie z Label 3 obrazovky 3, aplikácia túto obrazovku načíta do pamäte.
Povoliť DelayOutput pre textové ovládacie prvky
Nastavenie DelayOutput , keď je nastavené na true, registruje vstup používateľa po polsekundovom oneskorení. Toto oneskorenie je užitočné na odkladanie nákladných operácií, kým používateľ nedokončí zadávanie textu, podobne ako filtrovanie pri použití vstupu v iných vzorcoch.
Napríklad zvážme galériu, ktorej položky sú filtrované podľa toho, čo používateľ zadá do ovládacieho systému TextInput:
Ak nastavíte DelayOutput na false, čo je predvolené, galéria filtruje hneď, ako je napísaný akýkoľvek text. Ak máte galériu s množstvom predmetov, okamžité načítanie galérie so zmenami spomalí výkon. Je lepšie počkať. Toto správanie je praktické, keď používate funkciu
TextInputfor a search alebo theStartsWithfunction.Ak nastavíte DelayOutput na true, je krátke oneskorenie, kým sa zmeny zaznamenajú. Toto oneskorenie poskytuje čas na dokončenie písania. Oneskorenie dobre funguje s nehnuteľnosťou
TextInput.OnChange. Ak máte akcie viazané na zmeny, nechcete, aby sa spustili, kým nedokončíte zadanie v poli.
Delegácia a spracovanie na strane servera
Použitie delegácie a spracovania na strane servera umožňuje vašej aplikácii efektívne pracovať s veľkými dátovými súbormi tým, že operácie prenášajú na zdroj dát.
Delegovanie
Delegácia v Power Apps označuje schopnosť aplikácie preniesť určité operácie na základný dátový zdroj namiesto spracovania operácií priamo v Power Apps. Použitím delegácie v Power Apps môžete vytvárať efektívnejšie a škálovateľnejšie aplikácie, ktoré fungujú dobre aj v situáciách s veľkými dátovými súbormi. Buďte si vedomí obmedzení delegovania pre konkrétne zdroje dát a operácie a navrhujte svoju aplikáciu tak, aby ste dosiahli optimálny výkon.
Poznámka
Nie všetky funkcie sú delegovateľné. Viac o delegácii sa dozviete v Obmedzenia dotazov: Obmedzenia delegácie a dotazov.
Delegácia má niekoľko výhod, ako je optimalizácia dotazov a podpora veľkých dátových súborov. Okrem toho, ak sa zdrojové údaje často menia, delegovanie pomáha udržiavať údaje aktuálne.
Znížte počet volaní API do zdroja údajov
Niekedy sa môže zdať pohodlné vytvárať kolekcie vykonávaním spojení v rámci aplikácie plátna. Zvážte tento príklad. V príklade sú dve tabuľky: Vodiči a Nákladné vozidlá. Kód vytvára kolekciu údajov o vodičoch a nákladných vozidlách a pre každé nákladné vozidlo volá vodiča, ktorý vlastní nákladné vozidlo.
// 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)));
Vykonanie takéhoto spojenia v aplikácii plátna môže vygenerovať veľa volaní do zdroja údajov, čo vedie k pomalému načítavaniu.
Lepší prístup 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'
)
)
V reálnom čase môžete znížiť čas načítavania z piatich minút na menej ako 10 sekúnd opravou dát priamo pri zdroji.
Spracovanie na strane servera
Rôzne zdroje údajov, ako napríklad SQL a Dataverse , umožňujú vám delegovať spracovanie údajov, ako sú filtre a vyhľadávania, na zdroj údajov. V SQL Server môžete vytvárať pohľady definované dotazom. V Dataverse , môžete vytvoriť pluginy s nízkym kódom na spracovanie údajov na serveri a vrátenie iba konečných výsledkov do vašej aplikácie Canvas.
Delegovanie spracovania údajov na server môže zlepšiť výkon, znížiť množstvo kódu na strane klienta a uľahčiť údržbu aplikácie.
Zistite viac o pluginy v Dataverse .
Optimalizácia vzorov údajov dotazov
Optimalizácia spôsobu, akým vaša aplikácia posiela dotazy na dáta, môže výrazne skrátiť časy načítania a zlepšiť celkovú opozivu.
Použiť explicitný výber stĺpcov
Funkcia Explicitný výber stĺpcov (ECS) je predvolene zapnutá pre všetky nové aplikácie. Ak to nie je zapnuté vo vašej aplikácii, zapnite to. ECS automaticky zníži počet načítaných stĺpcov iba na tie, ktoré sa používajú v aplikácii. Ak ECS nie je zapnutý, môžete získať viac údajov, ako potrebujete, čo môže ovplyvniť výkon. Niekedy, keď aplikácia získava údaje prostredníctvom kolekcií, môže dôjsť k strate pôvodného zdroja stĺpca. ECS stĺpce vynechá, ak nedokáže zistiť, že sú použité. Aby ste prinútili ECS ponechať chýbajúci stĺpec, použite výraz ShowColumns Power Fx po referencii kolekcie alebo v kontrole.
Vyhnite sa volaniu Power Automate na naplnenie kolekcie
Bežnou praxou je používať Power Automate na načítanie a vyplňovanie kolekcií v Power Apps. Aj keď je tento prístup platný, existujú situácie, kedy nemusí byť najefektívnejšou voľbou. Volanie Power Automate pridáva sieťovú latenciu a výkon 0,6 sekundy na inštanciu toku Power Automate.
Nadmerné používanie tokov v Power Automate môže tiež viesť k obmedzeniam vykonávania a obmedzeniam výkonu. Vždy zhodnoťte kompromisy medzi latenciou siete a nákladmi na výkon.
Odstráňte problém N+1
Problém N+1 je bežný problém v databázových dotazoch, kde namiesto načítania všetkých požadovaných údajov v jednom dotaze sa vykonáva viacero ďalších dotazov na načítanie súvisiacich údajov. Tento problém môže viesť k problémom s výkonom, pretože každý ďalší dotaz prináša režijné náklady.
Jednoduché volanie ako toto na načítanie kolekcie môže vygenerovať N+1 volania na zdroj dát:
ClearCollect(MyCollection, OrdersList,
{
LookUp(CustomersList,CustomerID = OrdersList[@CustomerID])
}
)
V kontexte canvas aplikácií a galérií môže problém N+1 vzniknúť pri práci s dátovými zdrojmi a galériami, ktoré zobrazujú súvisiace záznamy. K problému zvyčajne dochádza, keď sa pre každú položku zobrazenú v galérii vykoná viac dopytov, čo vedie k zníženiu výkonu.
Použite objekty View v SQL Server, aby ste sa vyhli problému s dotazmi N+1, alebo zmeňte používateľské rozhranie, aby ste nespustili scenár N+1.
Dataverse automaticky načíta požadované údaje zo súvisiacich tabuliek a vy môžete vybrať stĺpce zo súvisiacich tabuliek.
ThisItem.Account.'Account Name'
Ak RelatedDataSource je veľkosť malá (menej ako 500 záznamov), uložte ju do vyrovnávacej pamäte v kolekcii a použite ju na riadenie scenára vyhľadávania (N+1).
Obmedzte veľkosť balenia
Aj keď Power Apps optimalizuje načítavanie aplikácií, môžete podniknúť kroky na zníženie ich zaťaženia. Znížená stopa je obzvlášť dôležitá pre používateľov starších zariadení alebo pre používateľov v lokalitách s vyššou latenciou alebo zníženou šírkou pásma.
Zhodnoťte médiá zabudované vo vašej aplikácii. Ak sa niečo nepoužíva, vymažte to.
Napríklad vložené obrázky môžu byť príliš veľké. Namiesto súborov PNG skontrolujte, či môžete použiť obrázky SVG. Buďte opatrní pri používaní textu vo SVG obrázkoch, pretože písmo musí byť nainštalované priamo na klientovi. Riešením, keď potrebujete zobraziť text, je prekryť obrázok textovou značkou.
Zhodnoťte, či je rozlíšenie vhodné pre daný formát. Rozlíšenie mobilnej aplikácie nemusí byť také vysoké ako rozlíšenie desktopovej aplikácie. Experimentujte, aby ste dosiahli správnu rovnováhu medzi kvalitou a veľkosťou obrazu.
Ak máte nepoužívané obrazovky, vymažte ich. Dávajte pozor, aby ste neodstránili žiadne skryté obrazovky, ktoré používajú iba tvorcovia aplikácií alebo správcovia.
Zhodnoťte, či sa snažíte do jednej aplikácie vtesnať príliš veľa pracovných postupov. Napríklad, máte v tej istej aplikácii obrazovky pre správcu aj obrazovky pre klienta? Ak áno, zvážte ich rozdelenie do jednotlivých aplikácií. Tento prístup tiež uľahčuje prácu viacerých ľudí na aplikáciách súčasne a obmedzuje "blast radius" (množstvo testovania), keď zmeny aplikácie vyžadujú kompletné testovanie.
Optimalizovať pre všetkých
Funkcia ForAll v Power Apps sa používa na prechádzanie tabuľkou záznamov a aplikáciu vzorca alebo množiny vzorcov na každý záznam. Aj keď je samotná funkcia všestranná, jej nesprávne využitie ForAll môže rýchlo znížiť výkonnosť vašej aplikácie.
Funkcia ForAll je singulárna sekvenčná funkcia namiesto súbežnej funkcie. Preto sa pozerá vždy len na jeden záznam, získa výsledok a potom pokračuje na ďalší záznam, až kým neprejde všetkými záznamami vo svojom rozsahu.
Vyhnite sa hniezdeniu ForAll. Táto prax môže viesť k exponenciálnym iteráciám a výrazne ovplyvniť výkon.
ClearCollect(FollowUpMeetingAttendees.ForAll(ForAll(Distinct(AttendeesList.EmailAddress.Address).Lookup(Attendees))))
Hromadná aktualizácia databázy
Môžete použiť ForAll a Patch na hromadnú aktualizáciu databázy. Buďte však opatrní, keď používate poradie ForAll a Patch.
Nasledujúca funkcia je napríklad lepším prístupom:
Patch(SampleFoodSalesData, ForAll(colSampleFoodSales,
{
demoName:"fromCanvas2"
})
);
Zatiaľ čo nasledujúci prístup je menej efektívny:
ForAll(colSampleFoodSales, Patch(SampleFoodSalesData,
{
demoName:"test"
})
);