Optimalizace načítání aplikací nebo stránek pro špičkový výkon
Jedním z klíčových faktorů, které utvářejí vnímání aplikace uživatelem, je, jak rychle je otevřena a lze ji používat. Proto je při vytváření výkonné aplikace zásadní dávat na tento cíl důraz. Chcete-li dosáhnout optimálního výkonu aplikace, je třeba věnovat pozornost třem hlavním oblastem:
- Rychlé načtení dat
- Efektivní výpočty
- Minimalizace požadovaných zdrojů
Každá z těchto oblastí má několik běžných protivzorců.
Rychlé načtení dat
Postupujte podle těchto pokynů, abyste dosáhli rychlého načítání dat aplikací.
Vyhněte se přímému naplnění kolekce velkým množstvím dat
Někdy autoři používají ClearCollect() ke kopírování dat ze serveru do kolekce v aplikaci. Tento postup se používá k obcházení omezeného delegování ve zdroji nebo k použití kolekcí v aplikaci pro jiné účely. Použití ClearCollect() může potenciálně zvýšit rychlost aplikace při pozdějším využití kolekce. Při jeho implementaci je však důležité postupovat opatrně. Použití ClearCollect tímto způsobem může vést k pomalejšímu načítání aplikací nebo přecházení mezi stránkami. Než je možné zobrazit data v galerii nebo tabulce, funkce ClearCollect() musí být dokončena. Tento krok může trvat dlouho, pokud zpracovává mnoho dat nebo pokud tuto funkci používáte pro příliš mnoho zdrojů dat. Kolekce je nejlépe používat v situacích, kdy je málo dat a s kolekcí potřebujete provést mnoho výpočtů. Dobrým využitím kolekcí je například košík online objednávky. Zákazník může před potvrzením objednávky několikrát aktualizovat a odstranit položky. Kromě toho můžete kolekci rozšířit o další datové položky, jako jsou potenciální slevy, zvýraznění atd. Data, která jsou „pouze pro čtení“, by měla být přístupná nativně – aniž byste je přenášeli do kolekce.
Zvažte nevolat Power Automate k naplnění kolekce
Tento problém je téměř stejný jako v předchozí části. Někdy autoři používají také Power Automate k naplnění kolekce v Power Apps. Vytvoření Instance Power Automate vyžaduje přibližně 0,6 sekundy. Aplikace Power Automate musí být nezávisle spuštěna pokaždé, když je zavolána. Musí přidělit paměť, nachystat správné komponenty a být připravena ke spuštění. Stejně jako u výše uvedených rad nemusí být jedno nebo dvě volání Power Automate problém v závislosti na konkrétní aplikaci. Téměř univerzálně však nejhůře fungující aplikace nadužívají tento přístup. Nároky na výkon se mohou rychle zvýšit a zničit výkon vaší aplikace.
Nepoužívejte SaveData() a LoadData() jako jediné funkce offline
Někteří autoři univerzálně používají ClearCollect() a poté SaveData() k ukládání dat v režimu offline. Pomocí funkce SaveData() můžete uložit kolekci do zařízení a pomocí funkce LoadData() ji načíst, když jste offline. Tento přístup se však nedoporučuje v případech, kdy je k dispozici velké množství dat nebo pokud jsou data složitá. Zpomaluje vaši aplikaci, protože musí čekat na dokončení funkce ClearCollect(), než může zobrazit data. Funkce SaveData() a LoadData() byste měli používat pouze pro malé objemy jednoduchých dat, jako jsou předvolby a krátké seznamy. Lepší způsob, jak pracovat s velkým množstvím offline dat, je použít funkci Power Apps offline, se kterou pracuje Dataverse. Tato funkce dokáže efektivněji zpracovávat větší a složitější data.
Použití funkce Explicitní výběr sloupce
Explicitní výběr sloupců je ve výchozím nastavení zapnutý. Někteří autoři však tuto funkci vypínají. Problém je v tom, že když je zapnutý Explicitní výběr sloupců (ECS), sloupce někdy nejsou načteny ze zdroje dat, pokud jsou data nejprve načtena do kolekce. Protože některé tabulky mohou mít mnoho sloupců, ECS automaticky vypočítá, které sloupce je nutné načíst, na základě jejich použití v ovládacích prvcích (například galeriích a formulářích). Protože některé tabulky mohou mít mnoho sloupců, snížení velikosti stahování může urychlit výkon. Některé tabulky mohou mít sto sloupců nebo více. Pokud vaše aplikace potřebuje pouze 10 sloupců a vy stáhnete všechny sloupce z tabulky se 100 sloupci, stahujete desetkrát více dat, než skutečně potřebujete.
Většina problémů vzniká při přidávání dat do kolekcí. Pokud je na sloupec explicitně odkazováno v ovládacím prvku, ECS funguje dobře. A ECS obecně funguje pro kolekce. Při přesunu dat mezi kolekcemi a proměnnými se však občas ztratí rodokmen sloupců. Takto může Power Apps ztratit přehled o sloupci, který by měl načíst. Chcete-li tento problém vyřešit, můžete přinutit Power Apps k „zapamatování“ sloupce pomocí funkce ShowColumns
. Příklad:
ClearCollect(
MyColTable,
ShowColumns(Filter(BankAccounts, AcountNo = 32),
"Col1",
"Col2",
"Col3")
);
Col1
, Col2
a Col3
jsou sloupce, u kterých očekáváte, že budou načteny ze zdroje dat (například Account
).
Případně můžete do formuláře přidat skrytý ovládací prvek, který odkazuje na sloupec. Tímto donutíte Power Apps k „zapamatování“ sloupce.
Rychlé výpočty
Rychlé (nebo efektivní) výpočty jsou samy o sobě cílem výkonu. Další informace naleznete v části Rychlé (efektivní) výpočty. Existují však některé běžné protivzory, které mohou také ovlivnit zatížení aplikace, a proto je zde uvádíme. Níže se nachází seznam optimalizací, které byste měli zvážit a které mohou ovlivnit spuštění aplikace nebo navigaci na stránce.
Použití funkce App.Formulas
Historicky mnoho autorů vložilo do OnStart velké množství výpočtů. Když do OnStart umístíte výraz, aplikace Power Apps je nucena spustit tento výraz přímo při spuštění aplikace a před vším ostatním. Se zavedením App.Formulas však můžete nechat Power Apps rozhodnout, kdy výraz spustit. Power Apps může spustit vzorec za běhu, když je potřeba. Další informace viz Vzorce aplikace. Pomocí App.Formulas rozdělte svůj vzorec na části, které Power Apps může efektivněji uspořádat ke spuštění.
Použití funkce Concurrent
Funkce Concurrent umožňuje souběžné provádění vzorců. Tato funkce se běžně používá k naplnění kolekcí, protože umožňuje paralelní provádění. I když tento postup může zajistit mírné zrychlení, přidáním mnoha zdrojů dat může dojít k problémům s načasováním a omezováním.
Použití zvýšeného výkonu skrytých ovládacích prvků
Když je toto ve výchozím nastavení povoleno ve všech nových aplikacích vytvořených od prosince 2022, Power Apps nevykreslí žádný ovládací prvek, který není zpočátku viditelný.
Minimalizujte potřebné zdroje
Minimalizujte zdroje potřebné ke spuštění aplikace nebo obrazovky. Tento postup zahrnuje pečlivé stanovení rozsahu nebo dělení prostředků, které potřebuje vaše aplikace nebo obrazovka. Níže uvádíme několik přístupů, které vám pomohou.
Použijte úvodní obrazovku s nízkou závislostí a odstraňte nepoužívané obrazovky.
Použijte první obrazovku s nízkou závislostí, jako je uvítací obrazovka aplikace. Vytvořte obrazovku, která nenačte galerii, tabulku nebo referenční data. Tento přístup ovlivňuje vnímání rychlosti aplikace uživatelem a umožňuje Power Fx správně odložit některé výpočty na později. Pokud máte nějaké nepoužité obrazovky, odstraňte je.
Udržujte minimální závislosti mezi obrazovkami
Odkazy mezi stránkami vynucují načítání dalších stránek prostřednictvím odkazů, například odkazováním na ovládací prvky na stránkách a vkládáním do kolekcí. Některé odkazy mohou být nutné. Pokud je to možné, centralizujte běžné odkazy na jednu stránku, aby se načetla pouze ona.
Zvažte vložená média
Autoři někdy do aplikací vkládají média, aby zajistili rychlé načítání. Pokud máte vložená média, zvažte, zda je používáte, nebo ne. Pokud ne, odstraňte je. Pokud jste vložili soubor .png, zvažte nahrazení souboru .svg, který je menší. Všimněte si, že pokud používáte .svg, písmo pro .svg musí být na klientském počítači. Zvažte rozlišení vložených médií. Není příliš vysoké pro zařízení, na kterém se bude používat?
Nezapomeňte na App.StartScreen
Pokud používáte App.StartScreen, ujistěte se, že první obrazovka je prázdná. Vzhledem k aktuálnímu balíčku aplikace je první logická obrazovka vždy zabalena s logikou inicializace aplikace a je inicializována bez ohledu, zda na ni kdy někdo přejde.
Zvažte rozdělení aplikace
Pokud je vaše aplikace velká, zvažte její rozdělení na menší aplikace. Pokud je funkčnost dostatečně oddělená v různých částech aplikace, může tento přístup fungovat. V tomto scénáři vytvoříte skutečnou samostatnou aplikaci, kterou spustíte s parametry zahrnujícími kontext z první nebo nadřazené aplikace.
Návrhy
Chcete-li dosáhnout cíle rychlého spuštění aplikace a stránky, zvažte následující otázky a návrhy:
- Načítáte mnoho dat na první obrazovce? Můžete použít jinou první obrazovku?
- Spouštíte mnoho příkazů nebo výrazů Power Fx na začátku načítání aplikace? Můžete tyto příkazy a výrazy odložit do pozdějšího bodu v aplikaci? Načítáte pouze data, která potřebujete k samotnému spuštění aplikace? 1 Můžete převést výrazy v App.OnStart na pojmenované vzorce pomocí App.Formulas? Takto může Power Fx rozhodnout, kdy skutečně provést vzorec namísto vynucení, aby se tak stalo při načítání nebo průchodu událostmi.
- Můžete použít samostatný tok Power Automate k vytvoření dočasné tabulky v místním úložiště dat, jako je Dataverse, který kombinuje data z různých zdrojů? A můžete pak k těmto datům přistoupit ve své aplikaci Power App?
- Můžete pro zahájení obchodních procesů použít akce aktivované serverem namísto volání toku Power Automate?
- Můžete vytvořit zobrazení na serveru, který za vás spojí data?
- Pokud chcete ve své aplikaci používat offline data, můžete použít funkci Power Apps offline, která funguje s Dataverse? Pokud vaše data nejsou uložena Dataverse, můžeš je tam přesunout?