Qual è la proprietà CSS più performante per la transizione di un elemento?

2

Mi chiedo se ci sia una differenza di prestazioni tra l'utilizzo di diverse proprietà CSS per tradurre un elemento. Alcune proprietà si adattano a situazioni diverse in modo diverso.

Puoi tradurre un elemento con le seguenti proprietà: transform , top/left/right/bottom e margin-top/left/right/bottom

Nel caso in cui non si utilizzi la proprietà CSS transition per la traduzione ma si usi qualche forma di timer ( setTimeout , requestAnimationFrame o setImmediate ) o eventi non elaborati, che è il più performante- che farà aumentare i tassi di FPS?

    
posta J. K. 19.11.2012 - 23:35
fonte

1 risposta

2

La tua milizia cambierà sempre tra diversi browser. Non penso che tu possa dire con precisione che una soluzione sarà sempre il miglior cross browser, ma su cosa puoi fare affidamento, è che qualsiasi cosa che usi la tua GPU sarà sarà più veloce. Quando esegui l'animazione utilizzando un setTimeout, il browser esegue tutto il crunch in memoria e attraverso la CPU. Inoltre, in realtà non sa che l'animazione prevista è prevista per essere liscia.

A seconda della versione del tuo browser, troverai anche che l'accelerazione della GPU può essere approssimativa. Ad esempio, fino allo scorso anno, un trucco comune per garantire che i browser basati sul webkit usassero sempre l'accellerazione GPU dovevo fare una sorta di "suggerimento tipo" in cui avresti impostato la proprietà come -webkit-transform: translateZ(0)

Un altro punto da aggiungere, tuttavia, è che cosa significa in realtà "performante" per te? Significa visivamente performante, il che significa liscio? In tal caso non si vorrebbe usare setTimeout, perché non è possibile ottenere realisticamente quella "levigatezza". Quindi, ove possibile, si vorrebbe utilizzare la transizione attraverso i CSS (e fare affidamento sull'accellerazione GPU dove disponibile).

Ma cosa intendi per "performante" in termini di durata della batteria del tuo dispositivo. In tal caso, probabilmente vorrai usare requestAnimationFrame .

Perché dovrei usarlo?

The browser can optimize concurrent animations together into a single reflow and repaint cycle, leading to higher fidelity animation. For example, JS-based animations synchronized with CSS transitions or SVG SMIL. Plus, if you're running the animation loop in a tab that's not visible, the browser won't keep it running, which means less CPU, GPU, and memory usage, leading to much longer battery life.

Riferimento: requestAnimationFrame for smart animating

Avanti, "performante" potrebbe significare tempo speso per te. Lo so personalmente, posso essere il più performante se uso le animazioni CSS e le uso laddove possibile.

Questo articolo sarà una lettura utile per te:

link

    
risposta data 20.11.2012 - 00:04
fonte

Leggi altre domande sui tag