Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Gli utenti si aspettano che le app rimangano reattive, sentirsi naturali e non svuotare la batteria. Tecnicamente, le prestazioni sono un requisito non funzionale, ma la gestione delle prestazioni come funzionalità consente di raggiungere le aspettative degli utenti. Specificare gli obiettivi e misurare i risultati: questi sono fattori chiave. Determinare gli scenari critici per le prestazioni, definire quali buone prestazioni significa e quindi misurare in anticipo e spesso nel ciclo di vita del progetto per avere la certezza di raggiungere gli obiettivi.
Specificare gli obiettivi
L'esperienza utente è un modo di base per definire prestazioni ottimali. Il tempo di avvio di un'app può influenzare la percezione delle prestazioni di un utente. Un utente potrebbe considerare un tempo di avvio dell'app inferiore a un secondo per essere eccellente, meno di cinque secondi per essere buono e maggiore di cinque secondi per essere scarso.
Altre metriche hanno un impatto meno evidente sull'esperienza utente, ad esempio la memoria. Le probabilità che un'app venga terminata quando è sospesa o inattiva aumentano con l'aumentare della quantità di memoria utilizzata dall'app attiva. L'utilizzo elevato della memoria degrada l'esperienza per tutte le app nel sistema, quindi avere un obiettivo di consumo di memoria è ragionevole.
Impostare obiettivi iniziali specifici e misurabili. Devono rientrare in tre categorie:
- Tempo : tempo necessario per gli utenti o l'app per completare le attività
- Fluidità : velocità e continuità con cui l'app si ridisegna in risposta all'interazione dell'utente
- Efficienza : quanto bene l'app consente di risparmiare risorse di sistema, inclusa l'alimentazione a batteria
Time
Si pensi a intervalli accettabili di tempo trascorso (classi di interazione) per consentire agli utenti di completare le attività.
| Classe di interazione | Percezione dell'utente | Ideal | Massimo | Examples |
|---|---|---|---|---|
| Veloce | Ritardo minimo evidente | 100 ms | 200 ms | Visualizzare la barra dell'app; premere un pulsante (prima risposta) |
| Tipico | Veloce, ma non veloce | 300 ms | 500 ms | Ridimensiona; zoom semantico |
| Reattivo | Non è veloce, ma sembra reattivo | 500 ms | 1 secondo | Passare a una pagina diversa; riprendere l'app |
| Launch | Esperienza competitiva | 1 secondo | 3 secondi | Avviare l'app per la prima volta |
| Continuo | Non si sente più reattivo | 500 ms | 5 secondi | Scaricare un file da Internet |
| Prigioniero | Troppo lungo; l'utente potrebbe passare ad altro | 500 ms | 10 secondi | Installare più app dallo Store |
Assegnare classi di interazione agli scenari di prestazioni dell'app. Per ogni scenario, assegnare il riferimento temporizzato dell'app, una parte dell'esperienza utente e una classe di interazione.
Fluidità
Obiettivi di fluidità misurabili specifici per l'app possono includere:
- Nessuna interruzione o irregolarità nell'aggiornamento dello schermo (anomalie)
- Le animazioni eseguono il rendering a 60 fotogrammi al secondo (FPS)
- Quando un utente esegue la panoramica o lo scorrimento, l'app presenta 3-6 pagine di contenuto al secondo
Efficiency
Obiettivi di efficienza misurabili specifici per l'app possono includere:
- La percentuale di CPU dell'app è uguale o inferiore a un valore target e l'utilizzo della memoria in MB è uguale o inferiore a un valore target in ogni momento
- Quando l'app è inattiva, l'uso della CPU e della memoria è minimo
- L'app può essere utilizzata attivamente per un numero prestabilito di ore con alimentazione a batteria
Progetta la tua app per garantire prestazioni elevate
Usa gli obiettivi di prestazioni per influenzare la progettazione della tua app. Considerare questi aspetti:
UI
- Ottimizzare l'efficienza di analisi e caricamento e memoria per ogni pagina ottimizzando il markup XAML. Rinviare il caricamento dell'interfaccia utente e del codice fino a quando non è necessario.
- Per
ListVieweGridView, rendere tutti gli elementi le stesse dimensioni e usare tutte le tecniche di ottimizzazione possibile. - Dichiarare l'interfaccia utente nel markup anziché crearla in modo imperativo nel codice.
- Ritardare la creazione di elementi dell'interfaccia utente fino a quando l'utente non ne ha bisogno usando l'attributo x:Load .
- Preferisce transizioni di tema e animazioni alle animazioni con storyboard. Le animazioni con storyboard richiedono aggiornamenti costanti sullo schermo e mantengono attiva la pipeline di CPU e grafica.
- Caricare le immagini a una dimensione appropriata per la visualizzazione in cui sono presenti.
CPU, memoria e alimentazione
- Pianificare il lavoro con priorità inferiore sui thread con priorità inferiore. Vedere Programmazione asincrona e classe DispatcherQueue .
- Riduci al minimo l'utilizzo di memoria dell'app liberando le risorse onerose, ad esempio i contenuti multimediali, quando non sono necessarie.
- Evitare perdite di memoria annullando la registrazione di gestori eventi e dereferenziando gli elementi dell'interfaccia utente quando possibile.
- Per ottimizzare l'efficienza della batteria, limita la frequenza con cui esegui il polling dei dati, interroghi un sensore o pianifichi attività sulla CPU quando è inattiva.
Accesso ai dati
- Se possibile, prelettura del contenuto.
- Memorizzare nella cache il contenuto costoso da accedere.
- In caso di cache miss, mostra il più rapidamente possibile un segnaposto nell'interfaccia utente che indichi che l'app sta ancora caricando i contenuti.
Strumento per il monitoraggio delle prestazioni
Mentre programmi, aggiungi codice che registri messaggi ed eventi in punti specifici durante l’esecuzione dell’app. In seguito, usare strumenti di profilatura come Windows Performance Recorder e Windows analizzatore prestazioni (inclusi entrambi nella Windows Performance Toolkit) per creare e visualizzare un report sulle prestazioni dell'app.
Windows fornisce API di registrazione supportate da Event Tracing for Windows (ETW) che offrono una soluzione avanzata di registrazione e traccia degli eventi. Le API nello spazio dei nomi Windows.Foundation.Diagnostics includono le classi FileLoggingSession, LoggingActivity, LoggingChannel e LoggingSession.
// using Windows.Foundation.Diagnostics;
LoggingChannel myLoggingChannel = new LoggingChannel("MyLoggingChannel");
myLoggingChannel.LogMessage("Here's my logged message.", LoggingLevel.Information);
Per registrare gli eventi di avvio e arresto in un periodo di tempo:
LoggingChannel myLoggingChannel = new LoggingChannel("MyLoggingChannel");
LoggingActivity myLoggingActivity;
using (myLoggingActivity = new LoggingActivity("MyLoggingActivity", myLoggingChannel))
{
// A start event is logged when the activity begins.
// Add code here to do something of interest.
}
// An end event is logged when the activity ends.
Testare e misurare gli obiettivi di prestazioni
Usare queste tecniche e strumenti per testare il modo in cui l'app si sovrapporrà agli obiettivi di prestazioni:
- Eseguire test su un'ampia gamma di configurazioni hardware, tra cui desktop, portatili, ultrabook e tablet.
- Eseguire test su un'ampia gamma di dimensioni dello schermo. Le schermate più ampie mostrano più contenuto, che può influire negativamente sulle prestazioni.
- Elimina quante più variabili di test possibile:
- Disattivare le app in background nel dispositivo di test.
- Compila l'app nella configurazione Release prima di distribuirla sul dispositivo di test.
- Eseguire l'app più volte per eliminare le variabili di test casuali e garantire misurazioni coerenti.
- Verificare la ridotta disponibilità di alimentazione. I dispositivi degli utenti potrebbero avere una potenza significativamente inferiore rispetto al computer di sviluppo.
- Usare una combinazione di strumenti come Visual Studio strumenti di diagnostica e Windows analizzatore prestazioni per misurare le prestazioni dell'app.
Rispondere ai risultati dei test delle prestazioni
Dopo aver analizzato i risultati dei test delle prestazioni, determinare se sono necessarie modifiche:
- È necessario modificare le decisioni di progettazione dell'app o ottimizzare il codice?
- È necessario aggiungere, rimuovere o modificare la strumentazione nel codice?
- È necessario rivedere gli obiettivi di prestazioni?
Se sono necessarie modifiche, apportarle e tornare alla strumentazione o al test.
Optimize
Ottimizzare solo i percorsi di codice critici per le prestazioni nell'app, ovvero quelli in cui viene impiegato il maggior tempo. La profilazione ti dice quali sono queste aree. Spesso, esiste un compromesso tra procedure di progettazione consigliate e codice che esegue al massimo l'ottimizzazione. Classificare in ordine di priorità la produttività degli sviluppatori e una buona progettazione del software in aree in cui le prestazioni non sono un problema.