Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Protože se plátěné aplikace vyvíjejí tak, aby vyhovovaly různým firemním potřebám, je důležité udržovat optimální výkon. Zpracování dat, návrh uživatelského rozhraní a funkce aplikací vyžadují pečlivý přístup k optimalizaci kódu.
S tím, jak se aplikace typu „canvas“ stávají složitějšími, můžete narazit na problémy s načítáním dat, složitostí vzorců a rychlostí vykreslování. Pokud chcete vyvážit silné funkce s responzivním uživatelským rozhraním, použijte systematický přístup k optimalizaci kódu.
Optimalizace vzorců Power Fx
Tato část obsahuje osvědčené postupy pro optimalizaci vzorců Power Fx.
Funkce With
Funkce With vyhodnocuje vzorec pro jeden záznam. Vzorec může vypočítat hodnotu nebo provést akce, jako jsou třeba úpravy dat nebo práce s připojením. Použijte With ke zlepšení čitelnosti složitých vzorců jejich rozdělením na menší pojmenované dílčí vzorce. Tyto pojmenované hodnoty fungují jako jednoduché místní proměnné omezené na rozsah With.
With je lepší než kontext nebo globální proměnné, protože je samostatná, snadno pochopitelná a funguje v jakémkoli kontextu deklarativního vzorce. Přečtěte si další informace o funkci With.
Současná funkce
Funkce Concurrent umožňuje současné vyhodnocení více vzorců ve stejné vlastnosti, pokud obsahují konektory nebo volání Dataverse. Za normálních okolností se vyhodnocuje více vzorců současně, když je zřetězíte pomocí operátoru ; (středník). S Concurrent aplikace vyhodnocuje všechny vzorce ve vlastnosti současně, a to i po použití operátoru ;. Tato souběžnost znamená, že uživatelé čekají na výsledky kratší dobu. Když se volání dat zahájí až po dokončení předchozích volání, doba čekání aplikace odpovídá součtu všech dob žádostí. Pokud se volání dat spustí současně, musí aplikace čekat jen tak dlouho, jak trvá nejdelší doba žádosti. Přečtěte si další informace o funkci Concurrent.
Concurrent(
ClearCollect(colAccounts1, Accounts),
ClearCollect(colUsers1, Users),
ClearCollect(colEnvDef1, 'Environment Variable Definitions'),
ClearCollect(colEnvVal1, 'Environment Variable Values')
);
Funkce Coalesce
Funkce Coalesce vyhodnocuje svoje argumenty podle pořadí a vrací první hodnotu, která není prázdná nebo prázdný řetězec. Tuto funkci použijte k nahrazení prázdné hodnoty nebo prázdného řetězce jinou hodnotou, ale ponechte nezměněné hodnoty a řetězce, které nejsou prázdné. Pokud jsou všechny argumenty prázdné nebo tvoří prázdné řetězce, vrátí funkce prázdnou hodnotu.
Coalesce je dobrý způsob, jak převést prázdné řetězce na prázdné hodnoty. Přečtěte si další informace o funkci Coalesce.
Tento příklad vyžaduje value1 a value2 musí se vyhodnotit dvakrát:
If(Not IsBlank(value1), value1, Not IsBlank(value2), value2)
Tuto funkci lze zredukovat na:
Coalesce(value1, value2)
funkce IsMatch
Funkce IsMatch testuje, jestli se textový řetězec shoduje se vzorem, který se může skládat z obyčejných znaků, předdefinovaných vzorů nebo regulárního výrazu. Přečtěte si další informace o funkci IsMatch.
Tento vzorec například odpovídá číslu sociálního zabezpečení Spojených států.
IsMatch(TextInput1.Text, "\d{3}-\d{2}-\d{4}")
Vysvětlení regulárního výrazu:
\\dOdpovídá libovolné číslici (0-9).{3}Určuje, že předchozí číselný vzor (\d) by se měl vyskytnout právě třikrát.-Odpovídá znaku spojovníku.{2}Určuje, že předchozí číselný vzor (\d) by se měl vyskytnout právě dvakrát.{4}Určuje, že předchozí číselný vzor (\d) by se měl vyskytnout právě čtyřikrát.
Další příklady IsMatch:
IsMatch(TextInput1.Text, "Hello World")
IsMatch(TextInput1\_2.Text, "(?!^\[0-9\]\\\*$)(?!^\[a-zA-Z\]\\\*$)(\[a-zA-Z0-9\]{8,10})")
Optimalizace OnStart aplikace
Vlastnost OnStart pro aplikace na plátně hraje zásadní roli při definování akcí, ke kterým dochází, když je aplikace spuštěna. Tato vlastnost umožňuje vývojářům aplikací provádět globální inicializační úlohy, nastavovat proměnné a provádět akce, které by se měly stát pouze jednou během procesu spouštění aplikace. Seznamte se s vlastností OnStart a využijte ji efektivně k vytváření responzivních a efektivních aplikací plátna.
App.OnStart Zjednodušte funkci migrací nastavení proměnných na pojmenované vzorce. Pojmenované vzorce, zejména ty nakonfigurované v rané fázi životního cyklu aplikace, jsou výhodné. Tyto vzorce zpracovávají inicializaci proměnných na základě datových volání a poskytují čistší a organizovanější strukturu vašeho kódu. Další informace najdete v tématu Vytváření rozsáhlých a složitých aplikací plátna.
Poznámka:
Vlastnost OnStart je imperativní. Jedná se o uspořádaný seznam práce, který je potřeba udělat před zobrazením první obrazovky. Vzhledem k tomu, že je to tak specifické nejen o tom, co je potřeba udělat, ale také v případě , že se tato práce musí provést na základě pořadí, omezuje změny pořadí a odložení optimalizace, které by jinak mohly být provedeny.
Úvodní obrazovka
Pokud App.OnStart obsahuje volání funkce Navigate, a to i v případě, že je ve funkci If a zřídka volána, musí aplikace dokončit provádění App.OnStart před zobrazením první obrazovky aplikace.
App.StartScreen je deklarativní způsob, jak označit, která obrazovka se má zobrazit jako první, a neblokuje optimalizace.
Nastavení vlastnosti StartScreen zobrazuje první obrazovku před dokončením App.OnStart.
App.StartScreen deklaruje, který objekt obrazovky se má zobrazit jako první bez nutnosti předběžného zpracování.
Místo psaní kódu jako:
App.OnStart = Collect(OrdersCache, Orders);
If(Param("AdminMode") = "1", Navigate(AdminScreen), Navigate(HomeScreen))
Změňte kód na:
App.OnStart = Collect(OrdersCache, Orders);
App.StartScreen = If(Param("AdminMode") = "1", AdminScreen, HomeScreen)
Další informace: App.StartScreen: deklarativní alternativa k navigaci v App.OnStart.
Upozornění
Vyhněte se závislostem mezi StartScreen a OnStart. Odkazování na pojmenovaný vzorec, který zase odkazuje na globální proměnnou, může způsobit závodní podmínku, ve které StartScreen není správně použit.
Nevytvávejte závislosti mezi StartScreen a OnStart. Zatímco aplikace blokuje odkazování na globální proměnné v StartScreen, můžete odkazovat na pojmenovaný vzorec, který zase odkazuje na globální proměnnou. Tento přístup může způsobit stav souběhu, při kterém se StartScreen nepoužije správně.
Pojmenované vzorce
Pojmenované vzorce jsou statické nebo konstanty, které lze definovat v App.Formulas. Jakmile jsou deklarovány v App.Formulas, můžete je použít kdekoli v aplikaci a jejich hodnoty budou vždy aktuální. Pojmenované vzorce v Power Apps umožňují definovat hodnoty nebo sady hodnot, které platforma automaticky spravuje a aktualizuje. Tato funkce přesouvá odpovědnost za výpočet hodnoty a údržbu od vývojáře k Power Apps, což zjednodušuje proces vývoje. Pojmenované vzorce v Power Apps jsou výkonnou funkcí, která výrazně zvyšuje výkon a udržovatelnost aplikací.
Pojmenované vzorce také pomáhají při deklarování motivů aplikací. Při vytváření podnikových aplikací často chcete, aby aplikace měla společné motivy, které poskytují konzistentní vzhled a uživatelské prostředí. Chcete-li vytvořit motiv, musíte deklarovat desítky až stovky proměnných v App.OnStartsouboru . Tato deklarace zvyšuje délku kódu a čas inicializace aplikace.
Moderní ovládací prvky mohou také výrazně pomoci při práci s motivy a pomáhají omezit uživatelskou logiku pro zpracování motivů. Moderní ovládací prvky jsou aktuálně v Preview.
Můžete například přesunout následující kód na App.OnStartApp.Formulas, což zkracuje čas spuštění u globálních deklarací proměnný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 App.Formulas můžete přesunout takto:
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";
Dalším příkladem je nastavení Lookups. V této části se ve vzorci Lookup vyžaduje změna, aby se informace o uživateli získaly z Office 365 místo Dataverse. Změnu musíte udělat jenom na jednom místě, aniž byste museli měnit kód všude.
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');
Tyto vzorce ztělesňují podstatu výpočtu. Vyjadřují proces určování UserEmail, UserInfo, UserTitle a UserPhone na základě jiných hodnot. Tato logika je zapouzdřená, což umožňuje široké využití v celé aplikaci a lze ji upravit na jediném místě. Přizpůsobitelnost se rozšiřuje o přechod z tabulky Dataverse Users na konektor Office 365, aniž by bylo nutné měnit vzorce rozptýlené v aplikaci.
Dalším přístupem je optimalizace countRows.
varListItems = CountRows(SampleList)
Set Pomocí funkce musíte inicializovat proměnnou varListItems s počátečním počtem řádků v ukázkovém seznamu a znovu ji nastavit po přidání nebo odebrání položek seznamu. Když se data s pojmenovanými vzorci změní, proměnná varListItems se automaticky aktualizuje.
Pojmenované vzorce ve App.Formulas vlastnosti poskytují flexibilnější a deklarativní přístup pro správu hodnot a výpočtů v celé aplikaci. Nabízejí výhody z hlediska nezávislosti časování, automatických aktualizací, udržovatelnosti a neměnných definic v porovnání s spoléháním výhradně na App.OnStart.
| Aspekt | Pojmenované vzorce (App.Formulas) | App.OnStart |
|---|---|---|
| Časování nezávislosti | Vzorce jsou k dispozici okamžitě a lze je vypočítat v libovolném pořadí. | Proměnné mohou zavést časové závislosti, které mohou ovlivnit dostupnost. |
| Automatické aktualizace | Vzorce se automaticky aktualizují, když se změní závislosti. | Proměnné se během spouštění nastavují jednou; můžou být potřeba ruční aktualizace. |
| Udržovatelnost | Centralizované vzorce na jednom místě zlepšují údržbu. | Rozptýlené proměnné mohou vyžadovat vyhledání a aktualizaci na více místech. |
| Neměnné definice | Definice vzorců v App.Formulas jsou neměnné. |
Proměnné hodnoty můžou být náchylné k náhodným změnám. |
Uživatelsky definované funkce
Uživatele definované funkce v Power Apps Studiu umožňují vytvářet vlastní funkce.
Definujte vzorec pod App.Formulas takto:
FunctionName(Parameter1:DataType1, Parameter2:DataType2):OutputDataType = Formula
Kód funguje takto:
FunctionNamevyvolá funkci.Parameterje název vstupu. Můžete zahrnout jeden nebo více vstupů.DataTypeje datový typ, který argument předaný funkci musí shodovat. Mezi dostupné datové typy patří logická hodnota, barva, datum, datum a čas, dynamický identifikátor GUID, hypertextový odkaz, text a čas.OutputDataTypeje datový typ pro výstup funkce.Formulaje výstup funkce.
Slouží IfError k implementaci zpracování chyb v rámci definované funkce:
// Function to calculate the area of a circle based on the radius
calcAreaOfCircle(radius: Number): Number =
IfError(Pi() * radius * radius, 0);
Zavolejte definovanou funkci z ovládacího prvku textu nebo popisku.
calcAreaOfCircle(Int(*TextInput1*.Text))
Optimalizace proměnných
Proměnné definují a nastavují místní a globální hodnoty, které používáte v celé aplikaci. I když jsou pohodlné, použití příliš mnoha proměnných může snížit efektivitu vaší aplikace.
Následující příklad ukazuje, jak nastavit proměnnou pro každý atribut objektu, který vyžaduje použití Set pro každou vlastnost.
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);
Efektivnějším přístupem je použít vlastnost jenom v případě, že ji potřebujete:
Set(varEmployee, Office365Users.MyProfile())
"Welcome " & varEmployee.DisplayName
Kontextové proměnné a globální proměnné používejte moudře. Pokud rozsah proměnné přesahuje jednu obrazovku, použijte místo kontextových proměnných globální proměnné.
Příliš mnoho nepoužívaných proměnných zvyšuje využití paměti a může zpomalit inicializaci aplikace. Prostředky jsou pro tyto proměnné přiděleny i v případě, že je nepoužíváte. Nepoužívané proměnné také zvyšují složitost logiky vaší aplikace. Udržujte Power App čistý a uspořádaný pro lepší výkon a snažší vývoj.
Optimalizace sbírek
Kolekce jsou dočasné datové storage struktury, které používáte k ukládání a manipulaci s daty v aplikaci Power Apps. Kolekce ale můžou způsobit výkonové přetížení. Omezte používání kolekcí a používejte je pouze v případě potřeby.
// Use this pattern
ClearCollect(colErrors, {Text: gblErrorText, Code: gblErrorCode});
// Do not use this pattern
Clear(colErrors);
Collect(colErrors, {Text: gblErrorText, Code: gblErrorCode});
Chcete-li spočítat záznamy v místní kolekci, použijte CountIf namísto Count(Filter()).
Při práci s kolekcemi zvažte tento přístup:
Omezte velikost a počet sbírek. Vzhledem k tomu, že kolekce jsou pro aplikaci místní, ukládají se do paměti mobilního zařízení. Čím více kolekcí dat se uchová nebo čím více kolekcí použijete, tím horší je výkon. Pomocí funkce
ShowColumnsmůžete získat pouze konkrétní sloupce. Přidejte funkciFilter, abyste získali pouze relevantní data.Následující ukázková funkce vrátí celou datovou sadu:
ClearCollect(colDemoAccount, Accounts);Porovnejte tuto funkci s následujícím kódem, který vrací pouze konkrétní záznamy a sloupce:
ClearCollect(colAcc, ShowColumns( Filter(Accounts, !IsBlank('Address 1: City')), "name","address1_city"))Tento příklad vrátí následující datovou sadu:
Nastavte frekvenci aktualizace datového zdroje. Pokud do kolekce přidáte nové záznamy, aktualizujte ji nebo do ní přidejte, abyste získali nové nebo změněné záznamy. Pokud váš zdroj dat aktualizuje více uživatelů, aktualizujte kolekci, abyste získali nové nebo změněné záznamy. Více obnovovacích volání znamená více interakce se serverem.
Ukládání dat do mezipaměti v kolekcích a proměnných
Kolekce je proměnná tabulky, která ukládá řádky a sloupce dat, nikoli pouze jednu datovou položku. Kolekce jsou užitečné ze dvou hlavních důvodů: agregace dat před jejich odesláním do zdroje dat a ukládání informací do mezipaměti, abyste se vyhnuli častým dotazům. Vzhledem k tomu, že kolekce odpovídají tabulkové struktuře zdroje dat a Power Apps, umožňují efektivně pracovat s daty, i když jste offline.
// Clear the contents of EmployeeCollection, it already contains data
ClearCollect(
colEmployee,
{
Id: "1",
Name: "John",
Department: "IT"
},
{
Id: "2",
Name: "Nestor",
Department: "IT"
}
)
Odeberte nepoužívané proměnné a média
I když nepoužívané médium a proměnné nemusí výrazně ovlivnit výkon aplikace, je důležité aplikaci vyčistit odebráním nepoužívaných médií nebo proměnných.
Nepoužívané mediální soubory zvětšují velikost aplikace, což může zpomalit načítání aplikace.
Nepoužívané proměnné zvyšují využití paměti a můžou mírně zpomalit inicializaci aplikace. Prostředky se těmto proměnným přidělují i v případě, že se nepoužívají. Příliš mnoho nepoužívaných proměnných může také zkomplikovat logiku aplikace.
Ke kontrole nepoužívaných médií a proměnných použijte nástroj Kontrola aplikací.
Optimalizace obrazovek a ovládacích prvků
Pokud chcete optimalizovat obrazovky a ovládací prvky v Power Apps, zvažte následující osvědčené postupy.
Vyhněte se křížovému odkazování ovládacích prvků
Ovládací prvky, které odkazují na ovládací prvky na jiných obrazovkách, mohou zpomalit načítání aplikací a navigaci. Tento přístup může vynutit, aby aplikace načetla jiné obrazovky, než aby čekala, až uživatel přejde na tuto obrazovku. Pokud chcete tento problém vyřešit, použijte proměnné, kolekce a kontext navigace ke sdílení stavu na obrazovkách.
Kontrola aplikací v Power Apps Studiu zobrazuje ovládací prvky, na které se odkazuje křížově. Pravidelně používejte nástroj ke kontrole aplikace, abyste vyřešili problém.
Na následujícím obrázku je ovládací prvek Galerie 1 křížově odkazován na ovládací prvek Screen 2, Label 2.
Pokud na druhé obrazovce aplikace odkazujete na ovládací prvek z první obrazovky, nedochází k žádnému poklesu výkonu, protože první obrazovka je už načtená. Toto chování je ve skutečnosti přínosné, protože aplikace je místo použití proměnných deklarativní.
Pokud odkazujete na ovládací prvky, které ještě nejsou načtené, například první obrazovka odkazující na ovládací prvek pojmenovaný Label 3 z obrazovky 3, aplikace načte tuto obrazovku do paměti.
Zapnutí DelayOutput na textových ovládacích prvcích
Nastavení DelayOutput při nastavení true zaregistruje uživatelský vstup po půlsekundovém zpoždění. Toto zpoždění je užitečné pro odložení drahých operací, dokud uživatel nedokončí zadávání textu, jako je filtrování při použití vstupu v jiných vzorcích.
Představte si například galerii, jejíž položky jsou filtrovány v závislosti na tom, co uživatel zadá do ovládacího prvku TextInput:
Pokud nastavíte hodnotu DelayOutput na false, což je výchozí hodnota, galerie filtruje hned po zadání libovolného textu. Pokud máte galerii s mnoha položkami, opětovné načtení galerie se změnami okamžitě zpomalí výkon. Je lepší počkat. Toto chování je praktické, když používáte
TextInputpro hledaný řetězec neboStartsWithpro funkci.Pokud nastavíte hodnotu DelayOutput na true, dojde k krátkému zpoždění, než se změny zjistí. Toto zpoždění poskytuje čas na dokončení psaní. Zpoždění dobře funguje s
TextInput.OnChangevlastností. Pokud máte akce svázané se změnami, nechcete, aby se aktivovaly, dokud nedokončíte zadávání do pole.
Delegování a zpracování na straně serveru
Použití delegování a zpracování na straně serveru umožňuje vaší aplikaci efektivně zpracovávat velké datové sady tím, že přesměruje operace do zdroje dat.
Delegování
Delegování v Power Apps odkazuje na schopnost aplikace přesměrovat určité operace do podkladového zdroje dat, a ne ke zpracování operací v rámci Power Apps samotné. Pomocí delegování v Power Apps můžete vytvářet efektivnější a škálovatelné aplikace, které dobře fungují i ve scénářích zahrnujících velké datové sady. Mějte na paměti omezení delegování pro konkrétní zdroje dat a operace a navrhněte aplikaci odpovídajícím způsobem tak, aby dosáhla optimálního výkonu.
Poznámka:
Ne všechny funkce jsou delegovatelné. Přečtěte si další informace o delegování v omezeních dotazů: Delegování a omezení dotazů.
Delegování má několik výhod, jako je optimalizace dotazů a podpora velkých datových sad. Navíc pokud se zdrojová data často mění, delegování pomáhá udržovat data aktuální.
Omezení volání API na zdroj dat
Někdy se může zdát vhodné vytvářet kolekce prováděním spojení v aplikaci plátna. Podívejte se na následující příklad. V tomto příkladu jsou dvě tabulky: Řidiči a Nákladní vozy. Kód vytvoří kolekci podrobností o řidičích a nákladních vozidlech a pro každé nákladní vozidlo zavolá řidiči, který nákladní vozidlo vlastní.
// 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)));
Provedení takového spojení v aplikaci plátna může generovat mnoho volání ke zdroji dat, což vede k pomalému načítání.
Lepší pří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'
)
)
Ve scénáři v reálném čase můžete zkrátit dobu načítání z pěti minut na méně než 10 sekund tím, že opravíte data ve zdroji.
Zpracování na straně serveru
Různé zdroje dat, jako je SQL a Dataverse, umožňují delegovat zpracování dat, jako jsou filtry a vyhledávání, na zdroj dat. V SQL Server můžete vytvořit zobrazení definovaná dotazem. V Dataverse můžete vytvářet plug-iny s nízkým kódem pro zpracování dat na serveru a vracet pouze konečné výsledky do vaší canvas aplikace.
Delegování zpracování dat na server může zlepšit výkon, snížit množství kódu na straně klienta a usnadnit údržbu aplikace.
Další informace o pluginech v Dataverse.
Optimalizace vzorů dat dotazů
Optimalizace způsobu, jakým aplikace dotazuje data, může výrazně snížit dobu načítání a zlepšit celkovou odezvu.
Použití funkce Explicitní výběr sloupce
Funkce Explicitní výběr sloupců (ECS) je ve výchozím nastavení zapnutá pro všechny nové aplikace. Pokud není pro vaši aplikaci zapnutá, zapněte ji. ECS automaticky sníží počet načtených sloupců pouze na ty, které se používají v aplikaci. Pokud ECS není zapnutý, můžete získat více dat, než potřebujete, což může mít vliv na výkon. V některých případech, když aplikace získá data prostřednictvím kolekcí, může dojít ke ztrátě původního zdroje sloupce. ECS zahodí sloupce, pokud nedokáže určit, že se používají. Pokud chcete, aby ECS zachoval chybějící sloupec, použijte výraz Power Fx ShowColumns za odkazem na kolekci nebo v ovládacím prvku.
Vyhněte se volání Power Automate k naplnění kolekce
Běžným postupem je použití Power Automate k načtení a naplnění kolekcí v Power Apps. I když je tento přístup platný, existují situace, kdy nemusí být nejúčinnější volbou. Volání Power Automate přidává latenci sítě a 0,6sekundové náklady na výkon pro vytvoření instance toku Power Automate.
Nadměrné používání toků Power Automate může také vést k limitům provádění a omezení. Vždy vyhodnoťte kompromisy mezi latencí sítě a náklady na výkon.
Odstraňte problém N+1
Problém N+1 je běžný problém v databázových dotazech, kde namísto načtení všech požadovaných dat v jediném dotazu se za účelem načtení souvisejících dat provádí několik dalších dotazů. Tento problém může vést k problémům s výkonem, protože každý další dotaz nese režijní náklady.
Jednoduché volání podobné tomuto načtení kolekce může generovat volání N+1 ke zdroji dat:
ClearCollect(MyCollection, OrdersList,
{
LookUp(CustomersList,CustomerID = OrdersList[@CustomerID])
}
)
V prostředí aplikací plátna a galerií může nastat problém N+1 při práci s datovými zdroji a galeriemi, které zobrazují související záznamy. K problému obvykle dochází, když je pro každou položku zobrazenou v galerii provedeno více dotazů, což vede k omezení výkonu.
Pomocí zobrazení objektů v SQL Server se vyhnete problému s dotazem N+1 nebo změňte uživatelské rozhraní, abyste se vyhnuli aktivaci scénáře N+1.
Dataverse automaticky načte požadovaná data souvisejících tabulek a můžete vybrat sloupce ze souvisejících tabulek.
ThisItem.Account.'Account Name'
Pokud RelatedDataSource je velikost malá (méně než 500 záznamů), uloží ji do mezipaměti v kolekci a použije ji k řízení scénáře dotazu Lookup (N+1).
Omezení velikosti balíčku
I když Power Apps optimalizuje načítání aplikací, můžete podniknout kroky ke snížení nároků vašich aplikací. Menší nároky na paměť jsou zvláště důležité pro uživatele starších zařízení nebo uživatele v oblastech, kde je vyšší latence nebo nižší šířka pásma.
Vyhodnoťte médium vložené v aplikaci. Pokud se něco nepoužívá, odstraňte to.
Vložené obrázky můžou být například příliš velké. Místo souborů PNG se podívejte, zda můžete použít obrázky SVG. Při použití textu v obrázcích SVG buďte opatrní, protože písmo musí být nainstalované v klientovi. Alternativním řešením, když potřebujete zobrazit text, je nad obrázkem převést textový popisek.
Posuďte, zda je rozlišení vhodné pro formát. Rozlišení mobilní aplikace nemusí být tak vysoké jako rozlišení aplikace pro stolní počítače. Experimentujte, abyste dosáhli správné rovnováhy mezi kvalitou a velikostí obrazu.
Pokud máte nepoužívané obrazovky, odstraňte je. Dávejte pozor, abyste nesmazali žádné skryté obrazovky, které používají pouze tvůrci aplikací nebo správci.
Vyhodnoťte, zda se nesnažíte vměstnat příliš mnoho pracovních postupů do jedné aplikace. Máte například ve stejné aplikaci obrazovky správce i obrazovky klienta? Pokud ano, zvažte jejich rozdělení do jednotlivých aplikací. Tento přístup také usnadňuje více lidem současnou práci na aplikacích a snižuje „zasaženou oblast“ (množství testování), když změny v aplikacích vyžadují úplné testování.
Optimalizace ForAll
Funkce ForAll v Power Apps slouží k iteraci v tabulce záznamů a použití vzorce nebo sady vzorců pro každý záznam. I když je samotná funkce všestranná, nesprávné použití ForAll funkce může rychle snížit výkon vaší aplikace.
Funkce ForAll je jednotná sekvenční funkce místo souběžné funkce. Proto se najednou podívá jenom na jeden záznam, získá výsledek a pak pokračuje k dalšímu záznamu, dokud neprojde všemi záznamy v jeho oboru.
Vyhněte se vnoření ForAll. Tento postup může vést k exponenciálním iteracím a výrazně ovlivnit výkon.
ClearCollect(FollowUpMeetingAttendees.ForAll(ForAll(Distinct(AttendeesList.EmailAddress.Address).Lookup(Attendees))))
Dávkové aktualizace databáze
Databázi můžete použít ForAll a Patch dávkově aktualizovat. Buďte však opatrní, pokud používáte pořadí ForAll a Patch.
Lepším přístupem je například následující funkce:
Patch(SampleFoodSalesData, ForAll(colSampleFoodSales,
{
demoName:"fromCanvas2"
})
);
vzhledem k tomu, že tento přístup je méně účinný:
ForAll(colSampleFoodSales, Patch(SampleFoodSalesData,
{
demoName:"test"
})
);