Supervisión del rendimiento en animaciones CSS

Publicado el

(Virendra Singh) (22 de abril de 2020)

Animación con JavaScript ? o Animación con CSS ?

Esta pregunta llega a todos los desarrolladores una vez, o probablemente dos o más, en su carrera técnica.

Con el tiempo, los expertos en Javascript crearon muchas bibliotecas para hacer animaciones en el navegador y todos parece convencido de utilizar estas bibliotecas como la solución estándar. Pero, espera, ¿es esta la solución correcta? ¿Deberíamos hacer animaciones usando JavaScript? ¿O podemos confiar en la implementación de CSS nativo para hacer la animación de una manera mejor y con un rendimiento mejor?

Ya que está leyendo este blog, asumiré que está familiarizado con las animaciones de JavaScript. Así que exploremos la «animación basada en CSS» en detalle y varios tipos de animación CSS junto con sus implicaciones de rendimiento.

La base de la animación se basa en algunas propiedades de CSS que a menudo utilizará en la animación basada en CSS. implementaciones.

posición: (absoluta / relativa)

transformar

opacidad

izquierda, derecha, arriba, abajo y muchos más.

Comencemos mirando los resultados de dos experimentos con diferentes propiedades CSS para la animación.

(a) posición absoluta con izquierda y arriba

(b) transformar

Además, ¿por qué no intentamos sacar conclusiones sobre el rendimiento y el tiempo de procesamiento en función de estos experimentos?

Al observar estos dos ejemplos, parece que similar la funcionalidad ha sido imp Lementado a pesar de utilizar diferentes enfoques. Sin embargo, cuando medimos las métricas de rendimiento en la herramienta de desarrollo de Chrome, vemos una diferencia real en términos de rendimiento para ambos casos.

Antes de profundizar para comprender estas métricas de rendimiento, debemos comprender cómo el navegador muestra la interfaz de usuario y todas las acciones que realiza cuando se realiza una actualización en la interfaz de usuario.

Por lo tanto, la creación de la interfaz de usuario comienza con:

1) Calcular los estilos que se van a aplicar a los elementos (Recalcular estilo)

2) Cree el diseño de los elementos y colóquelos en la pantalla (Diseño)

3) Agregue los píxeles en todos los diseños creados, es más bien crear un mapa de bits para cada capa. La GPU usa este mapa de bits para renderizar la capa en la pantalla (Paint)

4) Por último, crea las capas en la pantalla, construyendo una pila de capas. La vista superior de esta pila se verá como una página web completa en la que cada elemento tiene su propia posición (capas compuestas)

La creación de la capa compuesta es un lugar donde la CPU habla con la GPU, para manejar la animación. Usando propiedades como transform y opacity, podemos forzar al navegador a realizar animaciones usando GPU en lugar de CPU.

Entonces, ¿cómo nos ayuda la GPU a realizar una animación fluida?

GPU es otra máquina pequeña para manejar nuestra animación y puede manejar una gran cantidad de cálculos de UI.

Entonces, cuando se activa la creación de la capa compuesta, crea otra capa. Esta es otra forma de ayudarnos a evitar volver a renderizar el elemento que se está animando y otras partes de los elementos de la interfaz de usuario.

En la imagen de abajo, ambas bolas rojas parecen estar en la misma capa. Pero, cuando movemos esta capa en rotación 3D, encontramos que el Transform La animación tiene otra capa que se ha creado para la bola roja, proporcionando una animación suave.

La GPU mantiene este árbol de objetos de renderizado en la memoria y, sin volver a renderizar , puede poner esta capa encima de las demás. Pero, en el caso de la animación en la parte superior izquierda, la misma capa se renderiza una y otra vez debido a cambios en estas propiedades. Si comprobamos el comportamiento de estas dos propiedades CSS, veremos que ambas propiedades izquierda y arriba impactar en el diseño, provocando también una operación de repintado y compuesto.

Traducir vs Arriba / Izquierda

La animación anterior de la pelota tiene una clara diferencia entre traducir vs arriba / izquierda .

En el caso de arriba / izquierda animación, la bola se renderiza en cada posición hasta que alcanza el destino final y, cuando comienza a moverse a la posición inicial nuevamente, comienza la parte de renderización.

Nota: El color púrpura representa la creación del diseño de la bola roja y el color verde se usa para archivar los píxeles.

Las dos imágenes de arriba son una captura de pantalla de cómo translate funciona frente a top / left .

Al resaltar una sola tarea de cada una, comenzamos a entender que la actividad realizada por la tarea es diferente en ambos casos. En el caso superior / izquierdo , la tarea realizaba la creación del diseño, la pintura y el nuevo cálculo del estilo. En el caso de traducir , una sola tarea realizada por el La GPU mueve la capa compuesta sin renderizar nada en DOM.

Entonces, con la potencia de la GPU, mantenemos nuestro hilo principal libre. Esto nos ayuda a mejorar el rendimiento de la aplicación y nuestro hilo principal está ocupado renderizando el diseño.

El gráfico de métricas de rendimiento anterior proporciona más evidencia, explicando hasta qué punto nuestro hilo principal está ocupado en el recálculo de diseño y estilo. Este gráfico refleja continuamente los cambios que ocurren en la interfaz de usuario.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *