Ottimizza il caricamento dell'app o della pagina per ottenere le massime prestazioni

Uno dei fattori chiave che modellano la percezione di un'app da parte di un utente è la velocità con cui si apre e diventa funzionale. Pertanto, dare priorità a questo obiettivo è fondamentale per creare un'app performante. Per ottenere prestazioni ottimali dell'app, ci sono tre aree principali che richiedono attenzione:

  1. Caricare i dati velocemente
  2. Calcoli efficienti
  3. Riduzione al minimo delle risorse necessarie

Ognuna di queste aree ha diversi anti-modelli comuni.

Caricare i dati velocemente

Segui queste linee guida per ottenere app con caricamento rapido dei dati.

Evitare di popolare direttamente una raccolta con grandi quantità di dati

A volte gli autori utilizzano ClearCollect() per copiare i dati da un server a una raccolta nella loro app. Questa pratica rappresenta una soluzione alternativa alle limitazioni della delega nell'origine o perché si prevede di utilizzare le raccolte nell'app per altri scopi. L'utilizzo di ClearCollect() può potenzialmente aumentare la velocità dell'app quando la raccolta viene utilizzata successivamente. Tuttavia, è importante prestare attenzione durante l'implementazione. L'utilizzo di ClearCollect in questo modo può rallentare i tempi di caricamento delle app o la navigazione tra le pagine. ClearCollect() deve terminare prima di poter visualizzare i dati in una raccolta o in una tabella. Questo passaggio può richiedere molto tempo se sono presenti molti dati o se utilizzi questo approccio per troppe origini dati. Le raccolte sono utilizzate al meglio nelle situazioni in cui i dati sono piccoli ed è necessario eseguire molti calcoli sulla raccolta. Ad esempio, un buon uso delle collezioni è un carrello di ordini online. Il cliente può aggiornare e rimuovere gli articoli più volte prima di scegliere di confermare l'ordine. Inoltre, puoi aumentare la raccolta con più elementi di dati come potenziali sconti, evidenziazioni, ecc. È necessario accedere ai dati di "sola lettura" in modo nativo, senza inserirli in una raccolta.

Valuta la possibilità di evitare di chiamare Power Automate per popolare una raccolta

Questo problema è una leggera variazione della sezione precedente. A volte gli autori usano anche Power Automate per popolare la loro raccolta Power Apps. Per creare un'istanza di Power Automate è necessario un costo prestazionale di circa 0,6 secondi. Power Automate deve essere lanciato in modo indipendente ogni volta che viene chiamato. Deve allocare memoria, posizionarsi con i componenti giusti ed essere pronto per essere eseguito. Come per il consiglio precedente, una o due chiamate a Power Automate potrebbero non essere un problema a seconda dell'app. Ma, quasi universalmente, le app con le prestazioni peggiori abusano di questo approccio. Il costo delle prestazioni può aumentare rapidamente e rovinare le prestazioni della tua app.

Evitare di utilizzare SaveData() e LoadData() come uno scenario completamente offline

Alcuni autori utilizzano ClearCollect() e poi SaveData() per archiviare dati per uso offline generale. Puoi utilizzare SaveData() per salvare la raccolta sul tuo dispositivo e LoadData() per caricarla quando sei offline. Tuttavia, questo approccio non è consigliato nei casi in cui sono presenti grandi quantità di dati o se i dati sono complessi. Rende la tua app più lenta perché deve attendere il completamento di ClearCollect() prima di poter mostrare i dati. Dovresti utilizzare SaveData() e LoadData() solo per scenari di dati piccoli e semplici come preferenze ed elenchi brevi. Un modo migliore per lavorare con grandi quantità di dati offline è utilizzare la funzione Power Apps offline compatibile con Dataverse. Questa funzionalità può gestire dati più grandi e complessi in modo più efficiente.

Usa selezione esplicita delle colonne

La selezione esplicita delle colonne è attiva per impostazione predefinita. Tuttavia, alcuni autori disattivano questa funzionalità. Il problema è che con la selezione esplicita delle colonne (ECS) attivata, a volte le colonne non vengono recuperate da origine dati se i dati vengono prima recuperati in una raccolta. Poiché alcune tabelle possono avere molte colonne, ECS calcola automaticamente quali colonne è necessario recuperare in base al loro utilizzo nei controlli (ad esempio, gallerie e moduli). Poiché alcune tabelle possono contenere molte colonne, ridurre la dimensione del download può accelerare le prestazioni. Alcune tabelle possono avere un centinaio di colonne o più. Se la tua app deve utilizzare solo 10 colonne e rimuovi tutte le colonne da una tabella da 100 colonne, stai eliminando dieci volte più dati di quelli effettivamente necessari.

La maggior parte dei problemi sorgono quando si inseriscono i dati nelle raccolte. Se si fa riferimento esplicitamente a una colonna in un controllo, ECS funziona bene. Inoltre, ECS generalmente funziona per le raccolte. Tuttavia, la derivazione della colonna viene occasionalmente persa quando i dati si spostano attraverso raccolte e variabili. E quindi Power Apps potrebbe perdere traccia della colonna che dovrebbe recuperare. Per risolvere questo problema, puoi forzare Power Apps a "ricordare" la colonna utilizzando la funzione ShowColumns. Ad esempio:

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

Dove Col1, Col2 e Col3 sono le colonne che prevedi di recuperare da origine dati (ad esempio, Account origine dati).

In alternativa, puoi aggiungere un controllo nascosto al modulo che fa riferimento alla colonna. Questo costringe Power Apps a "ricordare" la colonna.

Calcoli veloci

I calcoli rapidi (o efficienti) sono di per sé un obiettivo di prestazione. Per ulteriori informazioni, vedi Calcoli rapidi (efficienti). Tuttavia, esistono alcuni anti-modelli comuni che possono influire anche sul caricamento dell'app e quindi ne discuteremo qui. Di seguito è riportato un elenco di ottimizzazioni da considerare che potrebbero influire sull'avvio dell'app o sulla navigazione della pagina.

Uso di App.Formulas

Storicamente molti autori hanno inserito un gran numero di calcoli in OnStart. Quando inserisci un'espressione in OnStart, forza Power Apps ad eseguire quell'espressione esattamente all'avvio dell'app e prima di tutto il resto. Tuttavia, con l'introduzione di App.Formulas puoi lasciare che Power Apps decida quando eseguire un'espressione. Power Apps può eseguire la formula "JIT" prima che sia necessaria. Per ulteriori informazioni, vedi Formule app. Utilizza App.Formulas per suddividere la formula in parti che Power Apps può organizzare in modo più efficiente per l'esecuzione.

Uso di Concurrent

Usare la funzione Concurrent per consentire l'esecuzione simultanea delle formule. È comune utilizzare questa funzione per popolare le raccolte poiché consente l'esecuzione parallela. Sebbene ciò possa fornire alcune modeste accelerazioni, l'aggiunta di molte origini dati può causare problemi di tempistica e limitazione.

Usare Prestazioni migliorate per i controlli nascosti

Se abilitato per impostazione predefinita in tutte le nuove app create a partire da dicembre 2022, Power Apps non esegue il rendering di alcun controllo che non sia inizialmente visibile.

Riduzione al minimo delle risorse necessarie

Riduzione al minimo delle risorse necessarie per avviare l'app o lo schermo. Questo sforzo include l'attenta definizione dell'ambito o il partizionamento delle risorse necessarie alla tua app o alla tua schermata. Di seguito sono riportati diversi approcci per aiutarti.

Utilizza una schermata iniziale a bassa dipendenza ed elimina le schermate inutilizzate.

Utilizza una prima schermata a bassa dipendenza, ad esempio un messaggio di benvenuto nell'applicazione. Crea una schermata che non carichi una galleria, una tabella o dati di riferimento. Questo gestisce la percezione della velocità da parte dell'utente e consente a Power Fx di ritardare correttamente alcuni calcoli a un momento successivo. Se hai schermi inutilizzati, rimuovili.

Mantieni basse le dipendenze tra schermi

I riferimenti tra pagine forzano il caricamento di pagine aggiuntive tramite riferimenti, ad esempio facendo riferimento ai controlli sulle pagine e inserendoli nelle raccolte. Alcuni riferimenti potrebbero essere inevitabili. Centralizza i riferimenti comuni su una singola pagina, se possibile, in modo che venga caricata solo la pagina.

Considera i supporti incorporati

Gli autori a volte incorporano contenuti multimediali nelle loro app per garantire un caricamento rapido. Se disponi di contenuti multimediali incorporati, valuta se li stai utilizzando o meno. Se no, eliminali. Se hai incorporato un file .png, valuta la possibilità di sostituirlo con un file .svg più piccolo. Tieni presente che se utilizzi un file .svg, il carattere per .svg deve trovarsi sul computer client. Considera la risoluzione multimediale incorporata. È troppo alto per il dispositivo su cui verrà utilizzato?

Non dimenticare App.StartScreen

Se utilizzi App.StartScreen, assicurati che la prima schermata sia vuota. A causa dell'attuale confezionamento dell'app, la prima schermata logica è sempre associata alla logica di inizializzazione dell'app e verrà inizializzata, indipendentemente dal fatto che la raggiungiamo o meno.

Valuta la possibilità di suddividere l'app

Se la tua app è di grandi dimensioni, valuta la possibilità di suddividerla in app più piccole. Se la funzionalità è sufficientemente separata in diverse parti della tua app, questo approccio potrebbe funzionare. In questo scenario crei un'app separata effettiva che avvii con parametri che includono il contesto della prima app o dell'app principale.

Suggerimenti

Per raggiungere l'obiettivo di un avvio rapido dell'app e della pagina, prendi in considerazione le seguenti domande e suggerimenti:

  1. Stai caricando molti dati in una prima schermata? È possibile utilizzare una prima schermata diversa?
  2. Stai eseguendo molti comandi o espressioni Power Fx all'inizio del caricamento dell'app? Puoi rimandare questi comandi ed espressioni a un punto successivo dell'applicazione? Ricevi solo i dati correntemente necessari per avviare l'app? 1 Puoi convertire le espressioni in App.OnStart in formule con nome con App.Formulas? Questo consente a Power Fx di decidere quando eseguire effettivamente la formula anziché forzarla in caso di caricamento o navigazione di eventi.
  3. Puoi usare un flusso Power Automate diverso per creare una tabella temporanea in un archivio dati locale come Dataverse che combina dati provenienti da origini diverse? E quindi accedere a tali dati nella tua Power App?
  4. Per l'avvio dei processi aziendali, puoi utilizzare le azioni attivate dal server anziché chiamare a flussi Power Automate?
  5. Puoi creare una vista sul server che unisca i dati per te?
  6. Se desideri utilizzare i dati offline nella tua app, puoi utilizzare funzionalità Power Apps offline con cui funziona Dataverse? Se i tuoi dati non sono presenti Dataverse, puoi spostarlo lì?