Resaltado de repintado: ver exactamente qué se redibuja
El overlay que colorea las regiones repintadas, cómo interpretar su tamaño y su frecuencia, y los cinco hallazgos que produce en cualquier aplicación real.
El panel de renderizado agrupa media docena de superposiciones visuales que responden preguntas que ningún número responde bien. La primera y la más rentable colorea en tiempo real cada región que el navegador vuelve a dibujar. En una aplicación que nadie ha revisado con ella, produce hallazgos en menos de treinta segundos: superficies enteras que se repintan por un cambio de un píxel, animaciones que arrastran a media pantalla, indicadores invisibles que siguen consumiendo trabajo.
- Activar el resaltado de repintado y leer lo que colorea.
- Distinguir un repintado inevitable de uno excesivo por su tamaño y su frecuencia.
- Relacionar la región repintada con el elemento y la propiedad que la provocan.
- Aplicar las tres técnicas de aislamiento que reducen la superficie repintada.
Cómo se activa y qué muestra
El panel de renderizado vive en el cajón inferior y se abre por su nombre desde el menú de comandos, que es la única forma de instrucción que no caduca. La primera casilla de la lista activa el resaltado.
A partir de ese momento, cada región que el navegador vuelve a pintar se colorea durante un instante. Interactúa con la página, desplázate, pasa el ratón por encima de las cosas, y observa qué se ilumina.
Lo que hay que mirar son dos cosas: cuánta superficie se colorea y con qué frecuencia. Un destello pequeño en el elemento que cambió es correcto y esperado. Un destello que abarca media pantalla porque cambió el color de un botón es un problema. Un parpadeo continuo sin que nadie toque nada es un desperdicio permanente.
El overlay tiene un coste propio: colorear regiones es trabajo adicional que el navegador no haría normalmente, así que con el resaltado activo la página va algo peor. Eso no invalida lo que muestra —las regiones son las que son— pero sí significa que no hay que medir tiempos con él activado. Se usa para ver qué se repinta, y el perfil para medir cuánto cuesta.
Interpretar lo que se ilumina
Una región mucho mayor que el elemento que cambió. El navegador pinta por regiones rectangulares, no por elementos. Si dos elementos alejados cambian a la vez, la región que los contiene a ambos se repinta entera, incluido todo lo que hay en medio. Y si el elemento que cambia está en la misma capa que un fondo grande, ese fondo se repinta con él.
Toda la ventana iluminándose al desplazarse. Un desplazamiento normal no debería repintar: el contenido ya está pintado y solo se desplaza la superficie. Si toda la ventana parpadea al desplazarse, hay algo que obliga a redibujar en cada fotograma. Los sospechosos habituales son un fondo fijo, una sombra que depende de la posición, un elemento fijo mal aislado, o código que modifica estilos en el manejador de desplazamiento.
Un parpadeo periódico en reposo. Algo se está animando sin que nadie lo pida. Es el hallazgo más frecuente de todos y casi siempre corresponde a un indicador de carga que sigue vivo detrás de otra cosa, o a una animación que continúa fuera del área visible.
Una región que se ilumina al pasar el ratón, mucho mayor que el elemento. Un efecto de hover que cambia una propiedad que afecta a la disposición o al fondo del contenedor.
Los cinco hallazgos habituales
Estos cinco aparecen en casi cualquier aplicación que no haya sido revisada con el overlay, y los cinco tienen arreglos conocidos.
El indicador que nunca muere. Una animación de carga que se oculta cambiando la opacidad a cero o desplazándola fuera de la vista en lugar de quitarla del árbol. Sigue animándose, sigue repintando, y nadie lo ve. Arreglo: quitar el elemento, o al menos aplicarle display: none, que sí detiene las animaciones.
La cabecera fija que arrastra la página. Un elemento fijo sin capa propia obliga al navegador a repintar la zona que ocupa en cada desplazamiento. Arreglo: promoverlo a capa propia con una transformación tridimensional o con will-change, con las precauciones de la lección sobre capas.
El efecto de hover que repinta el contenedor. Cambiar el color de fondo de una fila repinta la fila; cambiar su sombra puede repintar más allá de sus límites; cambiar su tamaño repinta todo lo que se mueve por debajo. Arreglo: preferir propiedades que solo afecten a la composición.
La animación de una propiedad de disposición. Animar el ancho, la altura, el margen o la posición estática obliga a recalcular la disposición y a repintar en cada fotograma, y arrastra a todos los hermanos. Arreglo: animar transformación y opacidad.
El texto que se vuelve a componer. Cambiar cualquier cosa que afecte a la métrica del texto —tamaño de fuente, espaciado, peso— fuerza recomposición y repintado del bloque entero. Es una de las razones por las que la sustitución de fuentes produce un destello enorme al terminar de cargar.
Las tres técnicas de aislamiento
Reducir la superficie repintada es un problema de aislamiento, y hay tres herramientas con precios distintos.
Contención. La propiedad contain le dice al navegador que los efectos de un elemento no salen de sus límites, lo que le permite acotar el trabajo. contain: layout promete que su disposición interna no afecta a nada de fuera; contain: paint promete que su contenido no se pinta fuera de sus límites; contain: strict combina las garantías. Es la herramienta más barata y la más infrautilizada, porque no crea capas ni consume memoria: simplemente da información al motor.
/* Aislar una fila de lista para que su repintado no salga de sus limites */
.fila-de-lista {
contain: layout paint;
}
/* Saltarse por completo el trabajo de lo que esta fuera del area visible */
.seccion-larga {
content-visibility: auto;
contain-intrinsic-size: auto 600px;
}
Promoción a capa. Sacar un elemento a su propia capa de composición hace que sus cambios no repinten nada más. Es potente y cuesta memoria de GPU, así que no se aplica en masa.
Reducir la superficie del elemento. A veces la solución más simple: una sombra enorme, un desenfoque de fondo o un degradado a pantalla completa son caros por naturaleza, y el arreglo es que sean más pequeños o que no existan.
Del overlay al arreglo
El procedimiento completo, cuando el overlay señala algo, tiene cuatro pasos.
Uno: identificar el elemento. La región coloreada no dice cuál es el elemento. Con el inspector, señala lo que está dentro de la región y comprueba qué cambia. Un breakpoint de modificación de atributos sobre el candidato confirma quién lo está tocando.
Dos: identificar la propiedad. Qué está cambiando exactamente. El panel de estilos con la vista de computados es lo más rápido, comparando antes y después.
Tres: clasificar esa propiedad. ¿Afecta a la disposición, al pintado, o solo a la composición? Esa clasificación decide todo lo demás, y hay una comprobación empírica que no requiere memorizarla: en el perfil, mira si el cambio produce bloques de disposición, solo de pintado, o ninguno de los dos.
Cuatro: sustituir o aislar. Si hay una propiedad equivalente más barata, se sustituye. Si no la hay, se aísla para que el daño no se propague.
Hay una asimetría de hardware que hace que este overlay sea mucho más importante de lo que parece cuando se prueba en un equipo de desarrollo, y conviene tenerla presente para no descartar hallazgos. El coste de repintar una región es aproximadamente proporcional al número de píxeles que contiene, y el número de píxeles de una región depende de la densidad de la pantalla. Un móvil con una relación de píxeles de tres dibuja nueve veces más píxeles que una pantalla sin escalado para cubrir la misma superficie en unidades CSS. Súmale que el ancho de banda de memoria y la potencia de la GPU de ese dispositivo son una fracción de los de un portátil, y que probablemente está limitando su frecuencia por temperatura después de dos minutos de uso, y una operación que en tu pantalla cuesta un milisegundo puede costar quince o veinte en el dispositivo real. Eso cambia el criterio de qué merece la pena arreglar: una región de repintado que en tu máquina parece despreciable puede ser exactamente la causa de que el desplazamiento vaya a tirones en móvil, y el error de descartarla es fácil de cometer porque el perfil de tu portátil no la señala. De ahí salen dos prácticas concretas. La primera: usa este overlay siempre con la ventana en dimensiones de móvil, no en pantalla completa de escritorio, porque el reparto de regiones cambia por completo con el ancho y muchos problemas solo existen en la disposición estrecha, donde los elementos ocupan el ancho entero y cualquier repintado abarca toda la pantalla. La segunda, y la definitiva: cuando puedas, ejecuta el overlay en el dispositivo real por depuración remota. Las regiones que se iluminan en un móvil conectado por cable son las de verdad, con su densidad de píxeles de verdad, y ver una pantalla de móvil parpadeando entera en cada desplazamiento es la clase de evidencia que convierte una discusión sobre prioridades en una tarea aceptada sin debate.