2014-12-10 11 views

risposta

60

pittura è in realtà due compiti: disegnare chiamate e rasterizzazione.

  • Estrarre chiamate. Questa è una lista di cose che ti piacerebbe disegnare e deriva dal CSS applicato ai tuoi elementi. In definitiva c'è una lista di chiamate disegnate non dissimili dall'elemento Canvas: moveTo, lineTo, fillRect (sebbene abbiano nomi leggermente diversi in Skia, backend di pittura di Chrome, è un concetto simile.)
  • Rasterizzazione. Il processo di passaggio attraverso quelle chiamate di richiamo e la compilazione di pixel effettivi in ​​buffer che possono essere caricati nella GPU per il compositing.

Così, con queste premesse, qui andiamo:

  • I solidi blocchi verdi sono chiamate in corso di registrazione da Chrome il sorteggio. Questi sono fatti sul thread principale insieme a JavaScript, calcoli di stile e layout. Queste chiamate di disegno sono raggruppate come una struttura di dati e passate al thread di composizione.
  • I blocchi verdi vuoti sono la rasterizzazione. Questi sono gestiti da un thread di lavoro generato dal compositore.

In sostanza, quindi, entrambi sono colori, rappresentano solo diversi sotto-compiti del lavoro complessivo. Se stai riscontrando problemi di prestazioni (e dalla cattura che hai fornito ti sembra di essere vincolato alla vernice), allora potresti dover esaminare quali proprietà stai modificando tramite CSS o JavaScript e vedere se c'è un modo per comporre solo gli stessi fini. CSS Triggers può probabilmente aiutare qui.

+3

Trigger CSS !!! Che sito fantastico! – frosty

+2

Paul, bello vederti su SO condividere le tue conoscenze! – Luca

+0

Grazie! Questo ha molto senso. E i Trigger CSS sono una buona idea. Sembra che dovrei usare la trasformazione invece di come sto facendo attualmente le cose. Quindi non solo hai risposto alla mia domanda, ma hai semplicemente aumentato enormemente le prestazioni del mio sito! –