Mantieni le proprietà solo compositor e gestisci il numero di livelli

La composizione è il luogo in cui le parti dipinte della pagina vengono assemblate per essere mostrate sullo schermo.

Paul Lewis

La composizione è il luogo in cui le parti dipinte della pagina vengono unite per essere mostrate sullo schermo.

In quest'area ci sono due fattori chiave che influiscono sulle prestazioni delle pagine: il numero di livelli del compositore che devono essere gestiti e le proprietà che utilizzi per le animazioni.

Riepilogo

  • Attieniti alle modifiche per trasformare e opacità per le animazioni.
  • Promuovi elementi in movimento con will-change o translateZ.
  • Evita di utilizzare troppe regole di promozione, in quanto i livelli richiedono memoria e gestione.

Utilizzare le modifiche di trasformazione e opacità per le animazioni

La versione con le prestazioni migliori della pipeline di pixel evita sia layout che paint e richiede solo modifiche di composizione:

La pipeline di pixel senza layout o colorazione.

Per ottenere questo risultato, dovrai attenerti alla modifica delle proprietà che possono essere gestite solo dal compositore. Oggi esistono solo due proprietà per le quali questa regola è vera: transforms e opacity:

Le proprietà che puoi animare senza attivare il layout o la colorazione.

Il avvertimento per l'uso di transform e opacity è che l'elemento su cui modifichi queste proprietà deve trovarsi sul suo livello compositor. Per creare un livello, devi promuovere l'elemento, di cui parleremo più avanti.

Promuovere gli elementi che intendi animare

Come accennato nella sezione "Semplifica la complessità della colorazione e riduci le aree di colorazione", devi promuovere gli elementi che intendi animare (entro i limiti consentiti, senza esagerare) nel relativo livello:

.moving-element {
  will-change: transform;
}

In alternativa, per i browser meno recenti o che non supportano, cambieranno:

.moving-element {
  transform: translateZ(0);
}

Gestisci i livelli ed evita le esplosioni dei livelli

Sapere che i livelli spesso favoriscono il rendimento potrebbe avere la tentazione di promuovere tutti gli elementi della pagina con qualcosa come il seguente:

* {
  will-change: transform;
  transform: translateZ(0);
}

Si tratta di un modo inopportuno per indicare che vuoi promuovere ogni singolo elemento della pagina. Il problema qui è che ogni livello che crei richiede memoria e gestione, ma questo non è senza costi. Infatti, sui dispositivi con memoria limitata l'impatto sulle prestazioni può superare di gran lunga qualsiasi vantaggio della creazione di un livello. Le texture di ogni livello devono essere caricate nella GPU, quindi sono previsti ulteriori vincoli in termini di larghezza di banda tra CPU e GPU e di memoria disponibile per le texture sulla GPU.

Utilizza Chrome DevTools per comprendere i livelli nella tua app

L'opzione di attivazione/disattivazione del profiler di colorazione in Chrome DevTools.

Per comprendere i livelli della tua applicazione e il motivo per cui un elemento ha un livello, devi attivare il profiler Paint nella cronologia di Chrome DevTools:

Quando questa opzione è attiva, dovresti registrare una registrazione. Al termine della registrazione potrai fare clic sui singoli frame, che si trova tra le barre dei frame al secondo e i dettagli:

Un frame che lo sviluppatore è interessato alla profilazione.

Se fai clic su questa opzione, verrà visualizzata una nuova opzione nei dettagli: la scheda del livello.

Il pulsante della scheda del livello in Chrome DevTools.

Questa opzione apre una nuova visualizzazione che ti consente di eseguire la panoramica, la scansione e lo zoom su tutti i livelli durante il fotogramma, insieme ai motivi per cui ogni livello è stato creato.

La visualizzazione del livello in Chrome DevTools.

In questa visualizzazione puoi tenere traccia del numero di livelli disponibili. Se dedichi molto tempo alla composizione durante azioni critiche per le prestazioni come lo scorrimento o le transizioni (l'obiettivo dovrebbe essere di circa 4-5 ms), puoi utilizzare queste informazioni per vedere di quanti livelli hai, perché sono stati creati e da lì gestire il numero di livelli nella tua app.