Composición hace referencia al proceso en el que las partes pintadas de la página se unen para mostrarlas en la pantalla.
Composición hace referencia al proceso en el que las partes pintadas de la página se unen para 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 opacidad de tus animaciones.
- Promueve elementos en movimiento con
will-change
otranslateZ
. - Evita usar en exceso las reglas de promoción. requieren memoria y administración.
Cómo usar los cambios de transform y opacidad para animaciones
La versión de la canalización de píxeles con mejor rendimiento evita tanto el diseño como la pintura, y solo requiere cambios en la composición:
![Canalización de píxeles sin diseño ni pintura.](https://web.developers.google.cn/static/articles/stick-to-compositor-only-properties-and-manage-layer-count/image/the-pixel-pipeline-no-la-96825803c8cec.jpg?authuser=9&hl=es)
Para lograr esto, deberás limitarte a las propiedades cambiantes que el compositor puede controlar únicamente. En la actualidad, esto es verdadero solo para dos propiedades: transform
y opacity
:
![Son las propiedades que puedes animar sin activar el diseño o la pintura.](https://web.developers.google.cn/static/articles/stick-to-compositor-only-properties-and-manage-layer-count/image/the-properties-can-anima-100ed2c7d26a4.jpg?authuser=9&hl=es)
La salvedad respecto del uso de los elementos transform
y opacity
es que el elemento en el que cambias estas propiedades debe estar en su propia capa del compositor. Para crear una capa, debes promover el elemento. Trataremos este tema a continuación.
Promover los elementos que quieres animar
Como mencionamos en la sección "Simplifica la complejidad de la pintura y reduce las áreas de pintura" debes promover los elementos que planeas animar (dentro de lo razonable, no te excedas) 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 la página con algo como lo siguiente:
* {
will-change: transform;
transform: translateZ(0);
}
Es una forma indirecta de decir que te gustaría promocionar cada elemento de la página. El problema aquí es que cada capa que creas requiere memoria y administración, y eso no es gratis. De hecho, en los dispositivos con memoria limitada, el impacto en el rendimiento puede superar con creces cualquier beneficio de crear una capa. Las texturas de cada capa deben subirse a la GPU, por lo que existen mayores restricciones en términos de ancho de banda entre la CPU y la GPU, y la memoria disponible para las texturas en la GPU.
Usa las Herramientas para desarrolladores de Chrome para comprender las capas de tu app
![Botón de activación del generador de perfiles de pintura en las Herramientas para desarrolladores de Chrome.](https://web.developers.google.cn/static/articles/stick-to-compositor-only-properties-and-manage-layer-count/image/the-toggle-the-paint-pro-0bfd1048bb7de.jpg?authuser=9&hl=es)
Para comprender las capas de tu aplicación y por qué un elemento tiene una capa, debes habilitar el generador de perfiles de pintura en las Herramientas para desarrolladores de Chrome. Cronograma:
Cuando esta opción esté activada, debes realizar 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:
![Un fotograma para el cual el desarrollador desea generar perfiles.](https://web.developers.google.cn/static/articles/stick-to-compositor-only-properties-and-manage-layer-count/image/a-frame-developer-is-int-195784f471018.jpg?authuser=9&hl=es)
Si haces clic en esta opción, aparecerá una nueva opción en los detalles: la pestaña Layer.
![El botón de la pestaña Layer en las Herramientas para desarrolladores de Chrome.](https://web.developers.google.cn/static/articles/stick-to-compositor-only-properties-and-manage-layer-count/image/the-layer-tab-button-chr-b74ebc86acad5.jpg?authuser=9&hl=es)
Esta opción te mostrará una nueva vista que te permitirá desplazarte, escanear y acercar todas las capas durante ese fotograma, junto con los motivos por los que se creó cada capa.
![Vista de capas en las Herramientas para desarrolladores de Chrome.](https://web.developers.google.cn/static/articles/stick-to-compositor-only-properties-and-manage-layer-count/image/the-layer-view-chrome-de-04740f747ced7.jpg?authuser=9&hl=es)
Con esta vista, puedes hacer un seguimiento de la cantidad de capas que tienes. Si pasas mucho tiempo en la composición durante acciones críticas para el rendimiento, como el desplazamiento o las transiciones (debes tratar de alcanzar unos 4 a 5 ms), puedes usar esta información para ver cuántas capas tienes, por qué se crearon y, a partir de allí, administrar el recuento de capas en tu app.