Dela via


Snabba beräkningar

Power Fx uttryck är kraftfulla och gör många bakgrundsberäkningar åt dig automatiskt. Medan Power Fx automatiserar många saker åt dig, det är möjligt att finjustera dina beräkningar så att det går så fort som möjligt.

Datahämtning

Använd explicit kolumnval

Funktionen explicit kolumnval (ECS) är aktiverad som standard för alla nya appar. Om det inte är aktiverat för din app bör du aktivera det. ECS minskar automatiskt antalet hämtade kolumner till endast de som används i appen. Om ECS inte är aktiverat kanske du hämtar mer data än du behöver, vilket kan påverka prestandan. Ibland, när en app hämtar data genom samlingar, kan den ursprungliga härkomsten eller källan till en kolumn gå förlorad. Vi vet inte om det används och vi släpper det med ECS. Du kan vanligtvis tvinga ECS att arbeta för en saknad kolumn genom att använda PowerFx-uttrycket Visa kolumner efter en samlingsreferens eller genom att använda den i en kontroll.

Använd bilder på gallerier, tabeller och formulär noggrant

Använda sig av Dataverse miniatyrversioner av bilder för gallerier och tabeller. Dataverse miniatyrbilder är små cirka 1 kilobyte och lagras inline som en del av posten, och är användbara och snabba för visning på kontroller som visar samlingar. Alla andra bildreferenser inklusive alla SharePoint-bilder kräver ett separat samtal och bör inte placeras på ett galleri eller tabell. Placera bilder som kräver en separat uppmaning på detaljformulär. Överväg att aldrig visa en hel bild som standard. Fullständiga bilder kan vara användbara och viktiga för användarna. Du kan dock göra dessa bilder tillgängliga för användare genom en explicit användaråtgärd, till exempel en knapp eller navigering till en separat sida. SharePoint har ett urval av mellanstora bilder som du kan använda för användning på ett formulär som är kortare än hela bilden. Dataverse har bara två storlekar: miniatyr och fullständig.

Beräkningar

Dela upp formler med App.formula

Användningen av App.formulas och namngivna formler kan hjälpa till med hastigheten för appladdning och sidnavigering eftersom det gör det möjligt för Power Fx att bestämma när en formel ska utvärderas. Det betyder att det inte nödvändigtvis behöver utvärderas i OnStart. Dessutom kan namngivna formler i allmänhet också hjälpa till att snabba upp. I synnerhet om du har ett långt skript, kan uppdelning av det i namngivna formler möjliggöra effektivare beräkningar eftersom Power Fx kan schemalägga arbetet och det möjliggör återanvändning. Mer information finns i Appformler.

Använd Concurrent

Använd funktionen Concurrent för att tillåta att formler exekveras samtidigt. Välj noga var samtidig används. Det kan ge några blygsamma hastigheter, men om du kör objekt som är beroende av varandra kan det orsaka problem med timing och begränsning.

Skjut upp betydande uppdateringar till ett icke-blockerande gränssnittssteg

Stora uppdateringar av en datakälla kan ta ett tag att slutföra. Men användarna förväntar sig att användargränssnittet snabbt återställer kontrollen till dem. Uppgifter kan vara antingen sekventiella där uppdateringen måste slutföras innan användaren kan vidta ytterligare åtgärder eller asynkrona (uppdateringen kan slutföras separat från användaråtgärder.)

Ett exempel på en tidskrävande synkron uppgift är att bekräfta en plats på en konsert. För de flesta tidskrävande synkrona uppgifter som denna är det vanligt att sätta upp en förloppsindikator. Detta gränssnitt blockerar faktiskt användaren men säkerställer att uppgiften är klar innan andra gränssnittselement uppdateras. Det här tillvägagångssättet kanske inte fungerar för din app. Företag hanterar normalt längre sekventiella steg som ett explicit affärssteg. Du är godkänd att gå nästa steg via en affärsprocessignal. Ett exempel är ett godkännande. Ett godkännande kan komma snabbt eller kan bli försenat. I användargränssnittet kan du signalera att processen är klar på flera sätt. Du kan aktivera en knapp, visa ett meddelande, skicka e-post eller aktivera en del av användargränssnittet, till exempel ett menyalternativ.

Ett exempel på en asynkron uppgift är slutförandet av en beställning. En kund uppdaterar en orderkorg, går igenom sin beställning och lägger sedan beställningen. Men flera uppdateringar måste ske innan kunden får ett bekräftat leveransdatum. I det här exemplet är leveransdatumet inte något du enkelt kan ange direkt. , kan du skjuta upp denna del av uppdateringen till ett e-postmeddelande som skickas till kunden senare.

För synkrona uppgifter använder du ofta koden i Power Apps för UI-blockeringsuppgifter. Till exempel väntar koden tills den får ett returvärde och släpper sedan förloppsindikatorn. Det är bäst att minimera dessa typer av situationer. Men för uppgifter som använder ett explicit affärssteg eller asynkrona uppgifter är det vanligt att använda en extern tjänst för att slutföra uppgiften, te.x. en Dataverse-åtgärd, lagrad procedur eller ett Power Automate-flöde.

Placera "ForAll"-anrop lämpligt

Om du har ett uttryck med ForAll och samlar som ser ut så här:

ForAll(x, Collect(y, { … }))

Invertera sedan detta till

Collect(y, ForAll(x, { … }))

I det första mönstret meddelas varje beroende regel för samling y om ändringar och utvärderas för varje iteration av x. I det andra mönstret utvärderas dessa regler endast en gång.

Överväg att undvika referenser till Gallery.AllItems

När du arbetar med Power Apps är det bäst att undvika att referera till Gallery.AllItems om du inte behöver använda användarvärden. Detta beror på att varje gång AllItems läses genereras en ny utdatatabell. Använd istället Gallery.AllItemsCount om du bara vill veta hur många objekt som är laddade.

Använd Gallery.TemplateSize försiktigt

För att säkerställa att gallerier med flexibel höjd återges korrekt är det viktigt att ställa in en rimlig standardstorlek. Till en början försöker vi återge så många rader som möjligt baserat på detta värde. Om du ställer in standardstorleken till 0, försöker vi återge allt, förutom ett fåtal edge-ärenden. Om du använder en formel, se till att ange ett lägsta värde för när formeln kan utvärderas till 0. Du kan till exempel använda Max (20, varFoo + rectBar.Height). På detta sätt, om varFoo och rectBar.Height ännu inte är tillgängliga, använder vi åtminstone ett rimligt värde på 20.

Det är en sekunds fördröjning innan ändringarna identifieras, vilket gör att du kan slutföra skrivningen istället för att upptäcka ändringarna för varje skrivning.