Dela via


Optimera app- eller sidbelastning för bästa prestanda

En av nyckelfaktorerna som formar en användares uppfattning om en app är hur snabbt den öppnar och blir funktionell. Därför är det avgörande att prioritera detta mål för att bygga en effektiv app. För att uppnå optimal apprestanda finns det tre huvudområden som kräver uppmärksamhet:

  1. Läsa in data snabbt
  2. Effektiva beräkningar
  3. Minimera nödvändiga resurser

Vart och ett av dessa områden har flera gemensamma antimönster.

Läsa in data snabbt

Följ dessa riktlinjer för att få appar att ladda data snabbt.

Undvik att direkt fylla en samling med stora mängder data

Ibland använder författare ClearCollect() för att kopiera data från en server till en samling i sin app. Denna praxis är en lösning för delegeringsbegränsningar i källan eller för att de planerar att använda samlingar i appen för andra ändamål. Att använda ClearCollect() kan potentiellt öka appens hastighet när samlingen senare används. Det är dock viktigt att vara försiktig när du implementerar det. Att använda ClearCollect på det här sättet kan leda till långsammare appladdningstider eller när du navigerar mellan sidor. ClearCollect() måste avslutas innan du kan se data i ett galleri eller en tabell. Det här steget kan ta lång tid om det finns mycket data eller om du använder det här tillvägagångssättet för för många datakällor. Samlingar används bäst för situationer där data är liten och du behöver göra många beräkningar på samlingen. En bra användning av samlingar är till exempel en beställningskorg online. Kunden kan uppdatera och ta bort varor flera gånger innan han väljer att utföra beställningen. Dessutom kan du utöka samlingen med fler dataobjekt som potentiella rabatter, höjdpunkter, etc. Data som är "skrivskyddad" bör nås inbyggt utan att ta med den i en samling.

Överväg att undvika att ringa Power Automate för att fylla en samling

Det här problemet är en liten variation av föregående avsnitt. Ibland använder författare också Power Automate för att fylla sin samling i Power Apps. Det finns en prestationskostnad på cirka 0,6 sekunder att instansiera Power Automate. Power Automate måste startas oberoende varje gång den anropas. Den måste allokera minne, placeras med rätt komponenter och vara redo att köras. Som med ovanstående råd kanske ett eller två anrop till Power Automate inte är ett problem som beror på din app. Men nästan allmänt överanvänder de sämst presterande apparna detta tillvägagångssätt. Prestandakostnaden kan öka snabbt och förstöra prestandan för din app.

Undvik att använda SaveData() och LoadData() som ett fullständigt offline-scenario

Vissa författare använder ClearCollect() och sedan SaveData() för att lagra data för allmänt bruk offline. Du kan använda SaveData() för att spara samlingen på din enhet och LoadData() för att ladda den när du är offline. Det här tillvägagångssättet rekommenderas dock inte för fall där det finns en stor mängd data eller om data är komplexa. Det gör din app långsammare eftersom den måste vänta på att ClearCollect() ska slutföras innan den kan visa data. Du bör endast använda SaveData() och LoadData() för små och enkla datascenarier som inställningar och korta listor. Ett bättre sätt att arbeta med stora mängder offlinedata är att använda Power Apps offlinefunktionen som fungerar med Dataverse. Denna funktion kan hantera större och mer komplex data mer effektivt.

Använd explicit kolumnval

Explicit kolumnval är aktiverat som standard. Men vissa författare stänger av den här funktionen. Problemet är att när explicit kolumnval (ECS) är aktiverat, hämtas ibland inte kolumner från datakälla om data först hämtas till en samling. Eftersom vissa tabeller kan ha många kolumner, beräknar ECS automatiskt vilka kolumner som är nödvändiga att hämtas baserat på deras användning i kontroller (till exempel gallerier och formulär.) Eftersom vissa tabeller kan ha många kolumner, kan en minskning av storleken på nedladdningen påskynda prestandan. Vissa tabeller kan ha hundra kolumner eller fler. Om din app bara behöver använda 10 kolumner och du tar ner alla kolumner från en tabell med 100 kolumner, tar du ner tio gånger så mycket data som du faktiskt behöver.

De flesta problem uppstår när data tas in i samlingar. Om en kolumn uttryckligen hänvisas till i en kontroll fungerar ECS bra. Och ECS fungerar i allmänhet för samlingar. Men kolumnlinjen går ibland förlorad när data rör sig genom samlingar och variabler. Och, och så Power Apps kan tappa koll på kolumnen den ska hämta. För att lösa det här problemet kan du tvinga Power Apps att "komma ihåg" kolumnen genom att använda ShowColumns-funktionen. Till exempel:

    ClearCollect(
        MyColTable, 
        ShowColumns(Filter(BankAccounts, AcountNo = 32),
        "Col1", 
        "Col2", 
        "Col3")
    );

Där Col1, Col2 och Col3 är kolumner som du förväntar dig att hämtas från datakälla (till exempel Account datakälla ).

Alternativt kan du lägga till en dold kontroll i ditt formulär som refererar till kolumnen. Detta tvingar Power Apps att "komma ihåg" kolumnen.

Snabba beräkningar

Snabba (eller effektiva) beräkningar är ett prestationsmål i sig. För mer information, se Snabba (effektiva) beräkningar. Det finns dock några vanliga antimönster som också kan påverka appbelastningen, så vi diskuterar dem här. Nedan finns en lista över optimeringar du bör tänka på som kan påverka appstart eller sidnavigering.

Använda App.Formulas

Historiskt har många författare lagt ett stort antal beräkningar i OnStart. När du placerar ett uttryck i OnStart tvingar det Power Apps att köra uttrycket precis när appen startar och före allt annat. Men med introduktionen av App.Formulas kan du låta Power Apps bestämma när ett uttryck ska köras. Power Apps kan köra formeln "Just-in-time" innan den behövs. Mer information finns i Appformler. Använd App.Formulas för att dela upp din formel i delar som Power Apps kan ordna mer effektivt för körning.

Använd Concurrent

Använd funktionen Concurrent för att tillåta att formler exekveras samtidigt. Det är vanligt att använda den här funktionen för att fylla i samlingar eftersom det möjliggör parallell körning. Även om detta kan ge vissa måttliga hastighetsökningar kan tillägg av många datakällor orsaka tids- och begränsningsproblem.

Använd förbättrade prestanda för dolda kontroller

När det är aktiverat som standard i alla nya appar som skapats sedan december 2022, återger Power Apps ingen kontroll som inte är synlig från början.

Minimera nödvändiga resurser

Minimera de resurser som krävs för att starta din app eller skärm. Denna ansträngning inkluderar noggrann omfattning eller partitionering av resurserna som din app eller skärm behöver. Nedan finns flera metoder för att hjälpa dig.

Använd en startskärm med lågt beroende och eliminera oanvända skärmar.

Använd en första skärm med lågt beroende, till exempel ett välkomstmeddelande, på din app. Skapa en skärm som inte läser in ett galleri eller en tabell eller referensdata. Detta hanterar användarens uppfattning om hastighet och tillåter Power Fx att fördröja vissa beräkningar till senare. Om du har oanvända skärmar, ta bort dem.

Håll skärmberoendet mellan skärmarna låga

Korsreferenser mellan sidor tvingar fram laddning av ytterligare sidor via referenser, till exempel genom att referera till kontroller på sidor och placera dem i samlingar. Vissa referenser kan vara oundvikliga. Centralisera vanliga referenser till en enskild sida om möjligt så att endast sidan laddas.

Överväg inbäddade media

Författare bäddar ibland in media i sina appar för att säkerställa snabb inläsning. Om du har inbäddade media, överväg om du använder det eller inte. Annars raderar du den. Om du har bäddat in en .png-fil, överväg att ersätta en .svg-fil som är mindre. Observera att om du använder en .svg måste typsnittet för .svg finnas på klientdatorn. Tänk på den inbäddade mediaupplösningen. Är den för hög för enheten den ska användas på?

Glöm inte App.StartScreen

Om du använder App.StartScreen, se till att den första skärmen är en tom skärm. På grund av nuvarande paketering av appen, är den första logiska skärmen alltid paketerad med appens init-logik och kommer att initieras, oavsett om vi någonsin navigerar till den.

Överväg att dela upp appen

Om din app är stor, överväg att partitionera den i mindre appar. Om funktionen är tillräckligt separat i olika delar av din app, kan det här tillvägagångssättet fungera. I det här scenariot skapar du en faktisk separat app som du startar med parametrar som inkluderar sammanhang från den första eller överordnade appen.

Förslag

För att uppnå målet med en snabb app- och sidstart, överväg följande frågor och förslag:

  1. Laddar du mycket data på en första skärm? Kan du använda en annan första skärm?
  2. Kör du många kommandon eller Power Fx-uttryck i början av appladdningen? Kan du skjuta upp dessa kommandon och uttryck till en senare punkt i programmet? Får du bara den data du faktiskt behöver för att starta appen? 1 Kan du konvertera uttryck i App.OnStart till namngivna formler med App.Formulas? Det här tillåter Power Fx att bestämma när formeln faktiskt ska köras istället för att tvinga den att hända vid laddning eller navigering av händelser.
  3. Kan du använda ett separat Power Automate-flöde för att skapa en tillfällig tabell i en lokal datalager som t.ex. Dataverse som kombinerar data från olika källor? Och sedan komma åt den informationen i din Power App?
  4. För start av affärsprocesser, kan du använda serverutlösta åtgärder istället för att anropa ett Power Automate-flöde?
  5. Kan du skapa en vy på servern som sammanfogar data åt dig?
  6. Om du vill använda offlinedata i din app kan du använda Power Apps offlinefunktion som fungerar med Dataverse? Om din data inte finns i Dataverse, kan du flytta den dit?