Del via


Raske beregninger

Power Fx-uttrykk er kraftige og utfører mange bakgrunnsberegninger for deg automatisk. Selv om Power Fx automatiserer mange ting for deg, går det an å finjustere beregningene slik at de blir så raske som mulig.

Datahenting

Bruk Eksplisitt kolonnevalg

Funksjonen Eksplisitt kolonnevalg (ECS) aktiveres som standard for alle nye apper. Hvis den ikke er aktivert for appen, bør du aktivere den. ECS reduserer antall hentede kolonner automatisk til bare de som brukes i programmet. Hvis ECS ikke er aktivert, kan det hende at du henter mer data enn du trenger, som kan påvirke ytelsen. Når en app henter inn data via samlinger, kan den opprinnelige avstammingen eller kilden til en kolonne av og til gå tapt. Vi vet ikke om den brukes, og vi dropper den ved hjelp av ECS. Du kan vanligvis tvinge ECS til å fungere for en manglende kolonne ved å bruke PowerFx-uttrykket ShowColumns etter en samlingsreferanse eller ved å bruke den i en kontroll.

Bruk bilder i gallerier, tabeller og skjemaer nøye

Bruk Dataverse-miniatyrbildeversjoner av bilder for gallerier og tabeller. Dataverse-miniatyrbilder er små bilder på omtrent 1 kB og lagres innebygd som en del av posten, og de er nyttige og raske for visning på kontroller som viser samlinger. Alle andre bildereferanser, inkludert alle SharePoint-bilder, krever et separat oppkall og skal ikke plasseres i et galleri eller en tabell. Plasser bilder som krever et separat oppkall, i detaljskjemaer. Vurder å aldri vise et fullstendig bilde som standard. Fullstendige bilder kan være nyttige og viktige for brukere. Du kan imidlertid gjøre disse bildene tilgjengelige for brukere via en eksplisitt brukerhandling, for eksempel med en knapp eller navigering til en egen side. SharePoint har en rekke mellomstore bilder du kan bruke i et skjema i stedet for det fullstendige bildet. Dataverse har bare to størrelser: Miniatyrbilde og Fullstendig.

Beregninger

Del opp formler med App.formula

Bruken av App.formulas og navngitte formler kan bidra til å øke hastigheten på appinnlasting og sidenavigering fordi den gjør at Power Fx kan avgjøre når en formel skal evalueres. Dette betyr at den ikke nødvendigvis trenger å evaluere den i OnStart. Navngitte formler kan generelt bidra til å øke hastigheten også. Særlig hvis du har et langt skript, kan du oppnå mer effektive beregninger ved å dele det opp i navngitte formler, siden Power Fx kan planlegge arbeidet, og det muliggjør gjenbruk. Hvis du vil ha mer informasjon, kan du se Appformler.

Bruk Concurrent

Bruk Concurrent-funksjonen, slik at formler kan utføres samtidig. Velg nøye hvor du bruker Concurrent. Den kan gi noen beskjedne hastighetsøkninger, men hvis du kjører elementer som er avhengige av hverandre, kan det føre til problemer med timing og begrensning.

Utsett betydelige oppdateringer til et ikke-blokkerende grensesnittrinn

Det kan ta en stund å fullføre store oppdateringer av en datakilde. Brukere forventer imidlertid at brukergrensesnittet gir dem tilbake kontrollen raskt. Oppgaver kan enten være sekvensielle, der oppdateringen må fullføres før brukeren kan utføre andre handlinger, eller asynkrone (oppdateringen kan fullføres atskilt fra brukerhandlinger.)

Et eksempel på en tidkrevende synkron oppgave er å bekrefte en plass på en konsert. Når det gjelder de fleste tidkrevende synkrone oppgaver som dette, er det vanlig å vise en fremdriftslinje. Dette brukergrensesnittet blokkerer faktisk brukeren, men sikrer at oppgaven blir fullført før andre grensesnittelementer oppdateres. Denne tilnærmingen fungerer kanskje ikke for programmet ditt. Bedrifter håndterer normalt lengre sekvensielle trinn som et eksplisitt forretningstrinn. Du er godkjent til å ta neste skritt via et forretningsprosessignal. Et eksempel er en godkjenning. En godkjenning kan komme raskt eller bli forsinket. I brukergrensesnittet kan du signalisere at prosessen er fullført, på flere måter. Du kan aktivere en knapp, vise en melding, sende e-post eller aktivere en del av brukergrensesnittet, for eksempel et menyelement.

Et eksempel på en asynkron oppgave er fullføring av en ordre. En kunde oppdaterer en handlekurv for en ordre, går gjennom ordren og foretar deretter bestillingen. Flere oppdateringer må imidlertid skje før kunden får en bekreftet forsendelsesdato. I dette eksemplet er ikke forsendelsesdatoen noe du enkelt kan oppgi med en gang. , kan du utsette denne delen av oppdateringen til en e-post er sendt til kunden senere.

Når det gjelder synkrone oppgaver, bruker du ofte koden i Power Apps til oppgaver som blokkerer brukergrensesnittet. Koden venter for eksempel til den får en returverdi, og frigir deretter fremdriftslinjen. Det er best å minimere denne typen situasjoner. Når det gjelder oppgaver som bruker et eksplisitt forretningstrinn eller asynkrone oppgaver, er det imidlertid vanlig å bruke en ekstern tjeneste til å fullføre oppgaven, for eksempel en Dataverse-handling, lagret prosedyre eller Power Automate-flyt.

Plasser ForAll riktig

Hvis du har et uttrykk med ForAll og Collect som ser slik ut:

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

Og deretter inverterer dette til

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

I det første mønsteret blir enhver avhengig regel i samling y varslet om endringer og evaluert for hver iterasjon av x. I det andre mønsteret blir disse reglene bare evaluert én gang.

Vurder å unngå referanser til Gallery.AllItems

Når du arbeider med Power Apps, er det best å unngå å referere til Gallery.AllItems med mindre du trenger brukerverdier. Dette er fordi det genereres en ny utadatatabell hver gang AllItems leses. Bruk i stedet Gallery.AllItemsCount hvis du bare vil vite hvor mange elementer som er lastet inn.

Bruk Gallery.TemplateSize forsiktig

For å sikre at gallerier med fleksibel høyde gjengis riktig, er det viktig å angi en rimelig standardstørrelse. Vi prøver til å begynne med å gjengi så mange rader som mulig basert på denne verdien. Hvis du setter standardstørrelsen til 0, prøver vi å gjengi alt, bortsett fra i noen få sjeldne tilfeller. Hvis du bruker en formel, sørger du for å angi en minimumsverdi for når formelen kan evalueres til 0. Du kan for eksempel bruke Max (20, varFoo + rectBar.Height). Hvis varFoo og rectBar.Height ikke er tilgjengelige ennå, bruker vi dermed i det minste en rimelig verdi på 20.

Det er en forsinkelse på ett sekund før endringene blir oppdaget, som gjør at du kan fullføre skrivingen i stedet for å oppdage endringene for hver skriving.