Limítate solo a las propiedades del compositor y administra el recuento de capas

La composición hace referencia al proceso en el que las partes pintadas de la página se unen para mostrarlas en la pantalla.

La composición hace referencia al proceso en el que las partes pintadas de la página se unen para mostrarlas en la pantalla.

En esta área, hay dos factores clave que afectan el rendimiento de la página: la cantidad de capas del compositor que deben administrarse y las propiedades que usas para las animaciones.

Resumen

  • Limítate a los cambios de transform y opacity para tus animaciones.
  • Promueve elementos en movimiento con will-change o translateZ.
  • Evita usar en exceso las reglas de promoción; las capas requieren memoria y administración.

Usa los cambios de transform y opacity para las animaciones

En la versión con mejor rendimiento de la canalización de píxeles, se evitan tanto el diseño como la pintura, y solo se necesitan cambios en la composición:

La canalización de píxeles sin diseño ni pintura.

Para lograrlo, debes limitarte a las propiedades de cambio que pueden controlarse únicamente mediante el compositor. En la actualidad, esto se aplica solo a dos propiedades: transform y opacity:

Son las propiedades que puedes animar sin activar el diseño ni la pintura.

La advertencia respecto del uso de transform y opacity es que el elemento en el que cambiarás estas propiedades debe encontrarse en su propia capa del compositor. Para poder crear una capa, debes promover el elemento. Hablaremos de esto a continuación.

Cómo promover los elementos que deseas animar

Como mencionamos en la sección “Simplifica la complejidad de la pintura y reduce las áreas de pintura”, debes promover los elementos que deseas animar (dentro de lo razonable; no lo hagas en exceso) a su propia capa:

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

Como alternativa, en el caso de los navegadores anteriores o aquellos que no sean compatibles con will-change:

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

Administra las capas y evita las explosiones de capas

Puede resultar tentador, al saber que las capas suelen contribuir al rendimiento, promover todos los elementos de tu página con algo como lo siguiente:

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

Esta es una forma indirecta de indicar que desearías promover cada elemento de la página. El problema es que cada capa que crees requerirá memoria y administración, y eso tiene consecuencias. De hecho, en los dispositivos con memoria limitada, el impacto en el rendimiento puede suponer un desequilibrio negativo contra cualquier beneficio que suponga la creación de una capa. Todas las texturas de las capas se deben subir a la GPU, por lo que hay aún más restricciones en términos de ancho de banda entre la CPU y la GPU, y a la memoria disponible para texturas en la GPU.

Usa Chrome DevTools para comprender las capas de tu app

Activación y desactivación del generador de perfiles de pintura en Chrome DevTools.

Para poder comprender las capas de tu aplicación y la razón por la cual un elemento posee una capa, debes habilitar el generador de perfiles Paint Profiler en Timeline de Chrome DevTools:

Cuando se active esta herramienta, debes iniciar una grabación. Cuando la grabación haya finalizado, podrás hacer clic en cada uno de los fotogramas, que se encuentran entre las barras de fotogramas por segundo y los detalles:

Es un fotograma para el cual el desarrollador desea generar un perfil.

Si haces clic aquí, aparecerá una nueva opción en los detalles: la pestaña Layer.

Botón de la pestaña Layer en Chrome DevTools.

A través de esta opción, se generará una nueva vista que te permitirá hacer una panorámica, analizar y acercar todas las capas durante ese fotograma, y se mostrarán los motivos por los cuales se creó cada una.

Vista de capas en las Herramientas para desarrolladores de Chrome.

Con esta vista, puedes realizar un seguimiento de la cantidad de capas que tienes. Si demoras mucho tiempo en la composición durante acciones críticas para el rendimiento, como el desplazamiento o las transiciones (debes intentar lograr, aproximadamente, 4 o 5 ms), puedes usar esta información para saber cuántas capas tienes y por qué se crearon, y, a partir de allí, administrar el recuento de capas en tu app.