Pianificare le prestazioni

Applies to Windows and Windows Phone

Le esperienze con app lente, non reattive e con un elevato consumo della batteria sono tra le principali cause di frustrazione degli utenti. Le app veloci, reattive e con un moderato consumo della batteria garantiscono invece soddisfazione e fedeltà degli utenti. Quando pianifichi le tue app di Windows Store, tieni sempre presenti le prestazioni.

Le prestazioni devono essere pianificate, progettate e testate come qualsiasi altra caratteristica delle app. Segui questa procedura per pianificare le prestazioni delle tue app.

  1. Definisci gli obiettivi di prestazioni delle tue app.
  2. Progetta le prestazioni.
  3. Instrumenta le tue app per le prestazioni.
  4. Testa le tue app e misura i risultati rispetto agli obiettivi di prestazioni.
  5. Ripeti e migliora le progettazioni delle tue app in base ai risultati dei test delle prestazioni.

Qui di seguito trovi informazioni dettagliate su ogni passaggio di questa procedura.

Definisci gli obiettivi di prestazioni delle tue app

Gli obiettivi di prestazioni delle app devono essere specifici e misurabili. Per rendere specifici questi obiettivi, può essere utile pensare alle caratteristiche di velocità, fluidità ed efficienza delle tue app: quanto tempo occorre agli utenti per completare attività nelle tue app, quanto velocemente rispondono le tue app alle interazioni degli utenti e quanto efficientemente preservano la durata della batteria.

Velocità

Un primo approccio consiste nel pensare agli intervalli di tempo considerati accettabili dagli utenti per il completamento delle attività nelle tue app. Questi intervalli di tempo sono detti classi di interazione. Per ognuna di queste classi di interazione puoi assegnare, ad esempio, un'etichetta, una percezione dell'utente, un intervallo di tempo target e un intervallo di tempo massimo. Ecco alcune classi di interazione suggerite corredate da esempi.

Etichetta della classe di interazionePercezione dell'utenteTargetMassimoEsempi
VeloceRitardo appena percepibile100 millisecondi200 millisecondiVisualizzazione della barra dell'app, pressione di un pulsante (prima risposta)
TipicaInterazione relativamente veloce300 millisecondi500 millisecondiRidimensionamento, zoom semantico
ReattivaInterazione non veloce, ma con percezione di risposta500 millisecondi1 secondoPassaggio a una pagina diversa, ripresa dell'app da uno stato sospeso
AvvioEsperienza di contesa1 secondo3 secondiPrimo avvio dell'app o riavvio dopo una precedente chiusura
ContinuaPercezione di assenza di risposta500 millisecondi5 secondiDownload di un file da Internet
BloccataTempi lunghi, possibile abbandono da parte dell'utente500 millisecondi10 secondiInstallazione di più app da Windows Store

 

Dopo avere definito una serie di classi di interazione, puoi assegnarle agli scenari di prestazioni delle tue app. A ogni scenario puoi assegnare, ad esempio, un riferimento temporale, una parte dell'esperienza utente e una classe di interazione. Ecco alcuni scenari di prestazioni suggeriti per un'app di esempio per cibo e ristorazione.

ScenarioFaseEsperienza utenteClasse di interazione
Passaggio alla pagina della ricetta Prima rispostaAnimazione di transizione di pagina avviataVeloce (100 - 200 millisecondi)
RispostaElenco degli ingredienti caricato, senza immaginiReattiva (500 millisecondi - 1 secondo)
Visualizzazione completaTutto il contenuto caricato, incluse le immaginiContinua (500 millisecondi - 5 secondi)
Ricerca di una ricettaPrima rispostaPulsante di ricerca sceltoVeloce (100 - 200 millisecondi)
Visualizzazione completaElenco dei titoli delle ricette locali visualizzatoTipica (300 - 500 millisecondi)

 

Dopo avere definito una serie di scenari di prestazioni, puoi testare, analizzare e migliorare la velocità della tua app in modo più mirato.

Fluidità

Gli obiettivi di prestazioni misurabili specifici da definire per una regolare velocità di risposta agli utenti includono:

  • Assenza di interruzioni e riavvii per l'aggiornamento dello schermo (glitch).
  • Animazioni dello schermo a 60 fotogrammi al secondo (FPS), 16 millisecondi di tempo della CPU e della GPU (Graphics Processing Unit, Unità di elaborazione grafica) per fotogramma.
  • Quando un utente scorre la tua app, dovresti darti come obiettivo la presentazione di 3-6 pagine di contenuto al secondo.

Efficienza

Gli obiettivi di prestazioni misurabili specifici da definire per l'efficienza includono:

  • Utilizzo massimo della memoria sempre pari o inferiore a una percentuale specificata della CPU e una quantità di memoria espressa in megabyte.
  • Quando l'utente non usa l'app, le percentuali della CPU e del disco devono essere pari a zero.

Ridurre il consumo della batteria

Gran parte del lavoro sulle prestazioni riduce naturalmente la quantità di energia utilizzata dall'app. La CPU è l'elemento principale che utilizza la carica della batteria dei dispositivi, anche a basso utilizzo. Windows 8 tenta di tenere la CPU in uno stato di basso consumo in caso di inattività, attivandola quando è previsto un lavoro. Puoi ridurre ulteriormente il consumo della batteria da parte dell'app facendo in modo che i timer della tua app non sovraccarichino di lavoro inutile la CPU quando è inattiva. Un'app può ad esempio eseguire il polling di dati da servizi Web e sensori, ad esempio GPS (Global Positioning Systems). Considera il consumo della batteria quando decidi la frequenza con cui eseguire il polling dei dati.

Si tratta di una considerazione importante anche per le animazioni che richiedono aggiornamenti costanti dello schermo e tengono attiva la CPU e la pipeline degli elementi grafici. Le animazioni possono essere importanti per offrire un'esperienza utente interessante, ma rifletti con attenzione su quando usarle. Questo è particolarmente importante per le app basate sui dati in cui l'utente potrebbe guardare l'app ma non interagire con essa. Un utente può ad esempio dedicare del tempo alla visualizzazione del contenuto di un lettore di news o di un visualizzatore di foto senza interagire con l'app. Può inoltre essere inutile usare animazioni in modalità snap perché l'utente non sta dedicando all'app tutta la sua attenzione.

Molte app sono connesse a servizi Web per ottenere nuove informazioni per l'utente. Riducendo la frequenza del polling di nuove informazioni puoi ridurre il consumo della batteria.

Ridurre il consumo di memoria

La riduzione dell'uso della memoria contribuisce a evitare i rallentamenti ed è ancora più importante per le app di Windows Store grazie al sistema Gestione del ciclo di vita dei processi. Il sistema Gestione del ciclo di vita dei processi determina quali app interrompere, anche e non solo in base al footprint di memoria dell'app. Mantenendo basso il footprint di memoria della tua app, riduci le probabilità che venga interrotta quando non è in uso. Puoi ad esempio ridurre il footprint di memoria dell'app rilasciando le risorse non necessarie quali le immagini in fase di sospensione.

Il sistema Gestione del ciclo di vita dei processi può anche passare l'app al disco e poi riportarla in memoria alla successiva attivazione. Se riduci il footprint di memoria della tua app, i tempi di ripresa saranno più veloci.

Dopo avere definito gli obiettivi di prestazioni, puoi usarli per ottimizzare la progettazione della tua app.

Progetta le prestazioni

Mentre progetti la tua app, tieni sempre presenti gli obiettivi di prestazioni. Prendendo spunto dalla nostra app di esempio per cibo e ristorazione, dopo che l'utente passa alla pagina della ricetta, potresti usare la tecnica di virtualizzazione per caricare più velocemente l'elenco iniziale degli ingredienti senza visualizzare per il momento le immagini. Ecco qualche altro aspetto da considerare.

Più pagine di contenuto

Le tecniche di progettazione delle prestazioni e scrittura del codice per la visualizzazione di più pagine di contenuto includono:

Funzionalità ed elementi visivi complessi

Le tecniche di progettazione delle prestazioni e scrittura del codice per la visualizzazione di funzionalità ed elementi visivi complessi includono:

  • Posticipa quanto più possibile il caricamento dell'interfaccia utente e del codice.
  • Quando possibile, usa sempre l'interfaccia utente senza codice, ovvero grandi porzioni di HTML o XAML (Extensible Application Markup Language) hardcoded che possono essere caricate in batch in fase di esecuzione.
  • Identifica la principale funzionalità della tua app e carica un numero minimo di elementi ogni volta possibile.
  • Visualizza le diverse parti dell'interfaccia utente in più fasi.
  • Le immagini caricate dovrebbero essere caricate con dimensioni appropriate per la visualizzazione in cui vengono presentate, tramite il metodo GetThumbnailAsync.
  • Per le animazioni nelle app di Windows Store scritte in JavaScript, usa le animazioni CSS (Cascading Style Sheet), lo spazio dei nomi WinJS.UI.Animation o entrambi. Vedi anche l'esempio relativo alla libreria di animazioni HTML.
  • Per le app di Windows Store scritte in JavaScript, posiziona i componenti dell'interfaccia utente con HTML e CSS, evitando il layout in linea, ad esempio le proprietà offsetWidth e offsetHeight.
  • Per le app di Windows Store scritte in C++, C# o Visual Basic, usa XAML, le transizioni dei temi e le animazioni. Per informazioni dettagliate, vedi Animazioni rapide e fluide nell'app di Windows Store e l'esempio relativo alle animazioni preconfigurate XAML.

Contenuto in diretta

Le tecniche di progettazione delle prestazioni e scrittura del codice per la visualizzazione di contenuto in diretta includono:

  • Identifica gli obiettivi di aggiornamento del contenuto. Ad esempio, è necessario aggiornare il contenuto a distanza di pochi secondi? Oppure è accettabile un'esperienza utente con un aggiornamento del contenuto a distanza di alcuni minuti o ore o persino una volta al giorno?
  • Memorizza il contenuto nella cache ogni volta possibile. Per altre informazioni, vedi:
  • Quando non è possibile memorizzare contenuto nella cache, mostra un'interfaccia utente reattiva il più velocemente possibile, ovvero un'interfaccia utente nella quale gli utenti possono spostarsi, ma che mostra una qualche indicazione all'utente per segnalare che l'app sta ancora caricando del contenuto.
  • Gestisci la transizione dal contenuto memorizzato nella cache al contenuto attivo in modo da non disturbare l'utente. Ad esempio, l'app non cambierà la posizione del contenuto sotto il dito dell'utente mentre carica il contenuto attivo.
  • Carica il contenuto in background. Per informazioni dettagliate, vedi:

Avvio dell'app

Le tecniche di progettazione delle prestazioni e scrittura del codice per l'avvio delle app includono:

Ripresa dell'app

Le tecniche di progettazione delle prestazioni e scrittura del codice per la ripresa delle app includono:

  • Gestisci la transizione dal contenuto memorizzato nella cache al contenuto attivo in modo che sia fluida e non disturbi l'utente. Ad esempio, l'app non cambierà la posizione del contenuto sotto il dito dell'utente mentre carica il contenuto attivo.
  • Non riavviare l'app o ripetere l'animazione del contenuto.
  • Un utilizzo più elevato della memoria si traduce in riprese più lente dell'app. Gestisci la memoria dell'app come segue:
    • Riduci il working set del codice.
    • Evita perdite di memoria annullando la registrazione di gestori di eventi e dereferenziando gli elementi visivi ogni volta possibile.
    • Per le app di Windows Store in JavaScript, usa il metodo createObjectUrl e la proprietà oneTimeOnly.
    • Se possibile, evita di creare app ibride che usano sia HTML/JavaScript che XAML per ridurre al minimo i riferimenti circolari.

Ridimensionamento e rotazione delle app

Le tecniche di progettazione delle prestazioni e scrittura del codice per il ridimensionamento e la rotazione delle app includono:

  • Per le app di Windows Store in C++, C# o Visual Basic, usa la classe VisualStateManager.
  • Per le app di Windows Store scritte in JavaScript, usa HTML/CSS anziché JavaScript per quanto possibile.
  • Esegui immediatamente solo le operazioni necessarie, posticipando quelle più onerose in termini di risorse. La tua app ha a disposizione tra 200 e 800 millisecondi per completare le operazioni prima che l'utente visualizzi l'interfaccia utente in stato ritagliato.

Panoramica del contenuto

Le tecniche di progettazione delle prestazioni e scrittura del codice per la panoramica all'interno del contenuto includono:

  • Prevedi da 3 a 6 pagine al secondo per le operazioni di panoramica dell'utente.
  • Virtualizza i grandi gruppi di elementi. Per informazioni dettagliate, vedi Uso della virtualizzazione con un elenco o una griglia.
  • Usa i modelli di progetto che prevedono il minor numero possibile di elementi.
  • Esegui il rendering del contenuto in più fasi.

Durante la progettazione, potresti notare altre considerazioni generali legate alle prestazioni che non corrispondono agli scenari di prestazioni identificati. Ad esempio, cosa succede se la connessione wireless del dispositivo è intermittente oppure se la connessione remota è lenta o la connessione Internet è del tutto assente? Nel caso dell'app di esempio per cibo e ristorazione una soluzione potrebbe consistere nel memorizzare nella cache le immagini dopo il download iniziale. Per informazioni su altre tecniche, vedi Dati sull'uso delle connessioni.

Una volta decise le progettazioni correlate alle prestazioni, puoi iniziare a scrivere il codice della tua app.

Instrumenta le tue app per le prestazioni

Mentre scrivi la tua app, puoi aggiungere codice per registrare messaggi ed eventi in corrispondenza di determinati punti dell'esecuzione dell'app. Successivamente, durante il test dell'app, puoi usare strumenti come Registrazione prestazioni Windows e Analizzatore prestazioni Windows (entrambi inclusi in Windows Performance Toolkit) per creare e visualizzare un report sulle prestazioni dell'app. I messaggi e gli eventi contenuti in questo report ti consentono di analizzare più facilmente i risultati.

Windows Runtime fornisce API di registrazione, basate su Traccia eventi per Windows (ETW), che insieme offrono una soluzione avanzata per la registrazione e la traccia di eventi per le app di Windows Store. Le API, che fanno parte dello spazio dei nomi Windows.Foundation.Diagnostics, includono le classi FileLoggingSession, LoggingActivity, LoggingChannel e LoggingSession.

Per registrare un messaggio nel report in corrispondenza di un punto specifico dell'esecuzione dell'app, crea un oggetto LoggingChannel, quindi chiama il relativo metodo LogMessage come nell'esempio seguente.



// using Windows.Foundation.Diagnostics;
// ...

LoggingChannel myLoggingChannel = new LoggingChannel("MyLoggingChannel");

myLoggingChannel.LogMessage(LoggingLevel.Information, "Here's my logged message.");

// ...


Per inserire nel report gli eventi di avvio e arresto relativi a un periodo di tempo specifico durante l'esecuzione dell'app, crea un oggetto LoggingActivity, quindi chiama il relativo costruttore LoggingActivity come nell'esempio seguente.



// using Windows.Foundation.Diagnostics;
// ...

LoggingActivity myLoggingActivity;

// myLoggingChannel is defined and initialized in the previous code example.
using (myLoggingActivity = new LoggingActivity("MyLoggingActivity"), myLoggingChannel))
{   // After this logging activity starts, a start event is logged.
    
    // Add code here to do something of interest.
    
}   // After this logging activity ends, an end event is logged.

// ...


Per altri esempi, vedi LoggingSession e FileLoggingSession.

Dopo avere instrumentato il codice della tua app, puoi testarne e misurarne le prestazioni.

Testa e misura i risultati rispetto agli obiettivi di prestazioni

Dopo avere instrumentato la tua app, usa le tecniche e gli strumenti seguenti per valutare le prestazioni della tua app rispetto agli obiettivi originali:

  • Ripeti il test con tutte le configurazioni hardware che potrebbero usare gli utenti, inclusi PC all-in-one e desktop, laptop, ultrabook e tablet.
  • Ripeti il test con tutte le dimensioni dello schermo che potrebbero usare gli utenti. Tieni presente che, nonostante dimensioni dello schermo maggiori consentano di visualizzare più contenuto, la visualizzazione di contenuti aggiuntivi può influire negativamente sulle prestazioni.
  • Elimina quante più variabili di test casuali possibile. Ad esempio:
    • Disattiva le app in background nel dispositivo di test. Per fare questo, in Windows seleziona l'accesso alle impostazioni > Modifica impostazioni PC > PC e dispositivi. Seleziona ogni app attiva nell'area App schermata di blocco, quindi seleziona Non visualizzare brevi info di stato qui.
    • Crea immagini del codice nativo nel dispositivo di test per le app di Windows Store scritte per Windows in C# o Visual Basic. Per fare questo, in Windows apri il Centro operativo dal Desktop. Nell'area Manutenzione, in Manutenzione automatica, seleziona Avvia manutenzione.
    • Esegui l'app più volte per eliminare le variabili di test casuali e ottenere misurazioni omogenee.
  • Testa la riduzione del consumo della batteria. Quando crei un'app, tieni presente che i tuoi clienti useranno un tipo di computer meno potente del tuo ambiente di sviluppo. Windows 8 è stato progettato per rispondere ai requisiti di dispositivi a basso consumo energetico, come i tablet. Inoltre, Windows RT si basa sugli stessi principi di progettazione per trarre vantaggio dalle caratteristiche a basso consumo delle piattaforme ARM. Le app di Windows Store devono fare la loro parte per garantire buone prestazioni su tali dispositivi. Operazioni che sembrano essere eseguite rapidamente in un computer di sviluppo possono avere un impatto forte sull'esperienza utente in un dispositivo poco potente. Puoi aspettarti realisticamente che un dispositivo poco potente sia circa quattro volte più lento di un computer desktop, pertanto stabilisci i tuoi obiettivi di conseguenza.
  • Usa una combinazione di set di strumenti come Microsoft Visual Studio e Analizzatore prestazioni Windows per misurare le prestazioni dell'app. Visual Studio è progettato per fornire un'analisi incentrata sull'app, ad esempio il collegamento del codice sorgente. Analizzatore prestazioni Windows è progettato per fornire un'analisi incentrata sul sistema, ad esempio informazioni di sistema, informazioni su eventi di modifica tramite tocco e informazioni sul costo dell'I/O su disco e della GPU. Entrambi questi set di strumenti offrono funzionalità per l'acquisizione e l'esportazione di tracce e consentono di riaprire tracce condivise e dopo che l'applicazione è terminata.
  • Prima di inviare l'app a Windows Store per la certificazione, assicurati di includere nei piani di test i test case correlati alle prestazioni come descritto nella sezione "Test delle prestazioni" di Test del Kit di certificazione app Windows e nella sezione "Prestazioni e stabilità" di Test case per le app di Windows Store.

Ripeti e migliora la progettazione dell'app in base ai risultati dei test delle prestazioni

Dopo avere analizzato i risultati dei test delle prestazioni, stabilisci se sono necessarie modifiche, ad esempio:

  • Devi modificare uno o più degli obiettivi di prestazioni dell'app?
  • Devi modificare una o più delle decisioni attuali inerenti la progettazione?
  • Devi aggiungere, rimuovere o modificare uno o più elementi di instrumentazione nel codice?

Se sono necessarie modifiche, torna all'inizio di questa procedura e ripetila.

Argomenti correlati

Pianificare la tua app
Prestazioni (app di Windows Store)
Procedure consigliate generali per le prestazioni
Procedure consigliate per le prestazioni per app di Windows Store scritte in JavaScript
Procedure consigliate per le prestazioni per app di Windows Store scritte in C++, C# o Visual Basic

 

 

Mostra:
© 2014 Microsoft