Het laden van apps of pagina's optimaliseren voor topprestaties
Een van de belangrijkste factoren die de perceptie van een gebruiker van een app bepalen, is hoe snel deze wordt geopend en functioneel wordt. Daarom is het prioriteren van dit doel cruciaal bij het bouwen van een goed functionerende app. Om optimale app-prestaties te bereiken, zijn er drie hoofdgebieden die aandacht vereisen:
- Snel laden van gegevens
- Efficiënte berekeningen
- Minimalisering van vereiste resources
Elk van deze gebieden heeft verschillende gemeenschappelijke antipatronen.
Snel laden van gegevens
Volg deze richtlijnen om het snel laden van gegevens voor apps te realiseren.
Vermijd het rechtstreeks vullen van een verzameling met grote hoeveelheden gegevens
Soms gebruiken auteurs ClearCollect() om gegevens van een server naar een verzameling in hun app te kopiëren. Deze praktijk is een oplossing voor delegatiebeperkingen in de bron of omdat ze van plan zijn verzamelingen in de app voor andere doeleinden te gebruiken. Het gebruik van ClearCollect() kan mogelijk de snelheid van de app verhogen wanneer de verzameling later wordt gebruikt. Het is echter belangrijk om voorzichtig te zijn bij de implementatie ervan. Het op deze manier gebruiken van ClearCollect kan leiden tot langzamere laadtijden van apps of bij het navigeren tussen pagina's. ClearCollect() moet voltooid zijn voordat u de gegevens in een galerie of tabel kunt zien. Deze stap kan lang duren als er veel gegevens zijn of als u deze aanpak voor te veel gegevensbronnen gebruikt. Verzamelingen kunnen het beste worden gebruikt in situaties waarin de gegevens klein zijn en u veel berekeningen op de verzameling moet uitvoeren. Een goed gebruik van collecties is bijvoorbeeld een online winkelmandje. De klant kan artikelen meerdere keren bijwerken en verwijderen voordat deze besluit de bestelling vast te leggen. Bovendien kunt u de collectie uitbreiden met meer gegevensitems, zoals mogelijke kortingen, hoogtepunten, enz. Gegevens die 'alleen-lezen' zijn, moeten native toegankelijk zijn, zonder deze in een collectie te plaatsen.
Overweeg om Power Automate niet aan te roepen voor het invullen van een colelctie
Dit probleem is een kleine variatie op het vorige gedeelte. Soms gebruiken auteurs ook Power Automate om hun collectie in Power Apps te vullen. Er zijn ongeveer 0,6 seconden prestatiekosten verbonden aan het instantiëren van Power Automate. Power Automate moet elke keer dat het wordt aangeroepen onafhankelijk worden gestart. Het moet geheugen toewijzen, de juiste componenten krijgen en klaar zijn om te draaien. Net als bij het bovenstaande advies zijn een of twee oproepen naar Power Automate mogelijk geen probleem, afhankelijk van uw app. Maar vrijwel overal maken de slechtst presterende apps te veel gebruik van deze aanpak. De prestatiekosten kunnen snel oplopen en de prestaties van uw app verpesten.
Vermijd het gebruik van SaveData() en LoadData() als een volledig offline scenario
Sommige auteurs gebruiken ClearCollect() en vervolgens SaveData() om gegevens op te slaan voor algemeen offline-gebruik. U kunt SaveData() gebruiken om de verzameling op uw apparaat op te slaan, en LoadData() om deze te laden wanneer u offline bent. Deze aanpak wordt echter niet aanbevolen als er sprake is van een grote hoeveelheid gegevens of als de gegevens complex zijn. Het maakt uw app langzamer omdat deze moet wachten tot ClearCollect() is voltooid voordat de gegevens kunnen worden weergegeven. U moet SaveData() en LoadData() alleen gebruiken voor kleine en eenvoudige gegevensscenario's als voorkeuren en korte lijsten. Een betere manier om met grote hoeveelheden offline gegevens te werken is door de Power Apps-offlinefunctie te gebruiken die werkt met Dataverse. Deze functie kan grotere en complexere gegevens efficiënter verwerken.
Expliciete kolomselectie gebruiken
Expliciete kolomselectie is standaard ingeschakeld. Sommige auteurs schakelen deze functie echter uit. Het probleem is dat als expliciete kolomselectie (ECS) is ingeschakeld, kolommen soms niet worden opgehaald uit de gegevensbron als de gegevens voor het eerst worden opgehaald in een verzameling. Omdat sommige tabellen veel kolommen kunnen bevatten, wordt met ECS automatisch berekend welke kolommen moeten worden opgehaald op basis van hun gebruik in besturingselementen (bijvoorbeeld galerijen en formulieren). En omdat sommige tabellen veel kolommen kunnen bevatten, kan het verkleinen van de downloadgrootte de prestaties versnellen. Sommige tabellen kunnen honderd kolommen of meer bevatten. Als uw app slechts 10 kolommen hoeft te gebruiken en u alle kolommen uit een tabel met 100 kolommen haalt, haalt u tien keer zoveel gegevens op als u daadwerkelijk nodig hebt.
De meeste problemen doen zich voor bij het ophalen van gegevens in verzamelingen. Als er expliciet naar een kolom wordt verwezen in een besturingselement, werkt ECS goed. En ECS werkt over het algemeen goed voor verzamelingen. Soms is echter de kolomherkomst niet meer duidelijk wanneer de gegevens door verzamelingen en variabelen worden verplaatst. En daardoor is het mogelijk dat Power Apps niet meer kan bijhouden welke kolom moet worden opgehaald. Om dit probleem op te lossen, kunt u Power Apps dwingen om de kolom te "onthouden" met behulp van de functie ShowColumns
. Bijvoorbeeld:
ClearCollect(
MyColTable,
ShowColumns(Filter(BankAccounts, AcountNo = 32),
"Col1",
"Col2",
"Col3")
);
Hierbij zijn Col1
, Col2
en Col3
kolommen waarvan u verwacht dat ze worden opgehaald uit de gegevensbron (bijvoorbeeld de gegevensbron Account
).
Als alternatief kunt u een verborgen besturingselement aan uw formulier toevoegen waarmee naar de kolom wordt verwezen. Hiermee wordt Power Apps gedwongen om de kolom te "onthouden".
Snelle berekeningen
Snelle (of efficiënte) berekeningen zijn op zichzelf een prestatiedoel. Zie Snelle (efficiënte) berekeningen voor meer informatie. Er zijn echter enkele veelvoorkomende antipatronen die ook van invloed kunnen zijn op het laden van apps, en daarom bespreken we deze hier. Hieronder vindt u een lijst met optimalisaties waarmee u rekening moet houden, en die van invloed kunnen zijn op het starten van de app of op de paginanavigatie.
App.Formulas gebruiken
Historisch gezien hebben veel auteurs een groot aantal berekeningen in OnStart geplaatst. Wanneer u een expressie in OnStart plaatst, wordt Power Apps geforceerd om die expressie precies uit te voeren wanneer de app start en vóór al het andere. Met de introductie van App.Formulas kunt u echter Power Apps laten bepalen wanneer u een expressie wilt uitvoeren. Power Apps kan de formule 'Just-in-time' uitvoeren voordat deze nodig is. Zie App.Formulas voor meer informatie. Gebruik App.Formulas om uw formule op te splitsen in stukjes die Power Apps op efficiëntere wijze kan schikken voor uitvoering.
Gebruik van Concurrent
Gebruik de functie Concurrent om ervoor te zorgen dat formules tegelijkertijd worden uitgevoerd. Het is gebruikelijk om deze functie te gebruiken om verzamelingen te vullen, omdat hiermee parallelle uitvoering mogelijk is. Hoewel dit enkele bescheiden versnellingen kan opleveren, kan het toevoegen van veel gegevensbronnen timing- en aanvraagbeperkingsproblemen veroorzaken.
Verbeterde prestaties gebruiken voor verborgen besturingselementen
Als dit standaard is ingeschakeld in alle nieuwe apps die sinds december 2022 zijn gemaakt; Power Apps geeft geen besturingselement weer dat in eerste instantie niet zichtbaar is.
Minimaliseer vereiste resources
Minimaliseer de benodigde resources voor het starten van uw app of scherm. Deze inspanning omvat het zorgvuldig in kaart brengen of verdelen van de resources die uw app of scherm nodig heeft. Hieronder vindt u verschillende aanpakken die u kunnen helpen.
Gebruik een startscherm met een lage afhankelijkheid en elimineer ongebruikte schermen.
Gebruik een eerste scherm met een lage afhankelijkheid, zoals een welkomstbericht op uw toepassing. Maak een scherm dat geen galerie, tabel of referentiegegevens laadt. Hierdoor wordt de snelheidsperceptie van de gebruiker beheerd en kan Power Fx sommige berekeningen op de juiste manier uitstellen naar een later tijdstip. Als u ongebruikte schermen heeft, verwijder deze dan.
Houd de afhankelijkheden tussen schermen laag
Onderlinge referenties tussen pagina's forceren het laden van extra pagina's via referenties, bijvoorbeeld het verwijzen naar besturingselementen op pagina's en het plaatsen in collecties. Sommige verwijzingen zijn wellicht onvermijdelijk. Centraliseer indien mogelijk algemene verwijzingen naar één pagina, zodat er maar één pagina geladen hoeft te worden.
Overweeg ingesloten media
Auteurs sluiten soms media in hun apps in om snel laden te garanderen. Als u over ingesloten media beschikt, overweeg dan of u deze wel of niet wilt gebruiken. Zo niet, verwijder deze dan. Als u een PNG-bestand hebt ingesloten, overweeg dan dit te vervangen door een kleiner SVG-bestand. Houd er rekening mee dat als u een .svg-bestand gebruikt, het lettertype voor de .svg op de clientcomputer moet staan. Overweeg de ingebouwde mediaresolutie. Is deze te hoog voor het apparaat waarop het wordt gebruikt?
Vergeet App.StartScreen niet
Als u App.StartScreen gebruikt, zorg er dan voor dat het eerste scherm een leeg scherm is. Vanwege de huidige verpakking van de app wordt het eerste logische scherm altijd gebundeld met de app-init-logica, en wordt het scherm geïnitialiseerd, ongeacht of we er ooit naartoe navigeren.
Overweeg om de app op te splitsen
Als uw app groot is, kunt u overwegen deze in kleinere apps te verdelen. Als de functionaliteit voldoende gescheiden is in verschillende delen van uw app, kan deze aanpak werken. In dit scenario maakt u een daadwerkelijke afzonderlijke app die u start met parameters die context van de eerste of bovenliggende app bevatten.
Suggesties
Om het doel van een snelle app- en paginastart te bereiken, kunt u de volgende vragen en suggesties overwegen:
- Laadt u veel gegevens in een eerste scherm? Kunt u een ander eerste scherm gebruiken?
- Voert u veel opdrachten of Power Fx-expressies uit aan het begin bij het laden van de app? Kunt u deze opdrachten en expressies uitstellen naar een later punt in de toepassing? Haalt u alleen de gegevens op die u daadwerkelijk nodig hebt om de app te starten? 1 Kunt u uitdrukkingen in App.OnStart converteren naar benoemde formules met App.Formulas? Hierdoor kan Power Fx beslissen wanneer de formule daadwerkelijk moet worden uitgevoerd, in plaats van deze te forceren tijdens het laden of te navigeren door gebeurtenissen.
- Kunt u een aparte Power Automate-stroom gebruiken om een tijdelijke tabel te maken in een lokale gegevensopslag zoals Dataverse, die gegevens uit verschillende bronnen combineert? En vervolgens toegang krijgen tot die gegevens in uw Power App?
- Kunt u voor de start van bedrijfsprocessen door de server geactiveerde acties gebruiken in plaats van een Power Automate-stroom?
- Kunt u op de server een weergave maken die de gegevens voor u samenvoegt?
- Als u offline gegevens in uw app wilt gebruiken, kunt u de Power Apps-offline functie gebruiken die werkt met Dataverse? Als uw gegevens zich niet in Dataverse, bevinden, kunt u ze daarheen verplaatsen?