Reduce el alcance y la complejidad de los cálculos de estilo

JavaScript suele ser un activador de cambios visuales. A veces, eso hace que esas cambia directamente con manipulaciones de estilo y, en ocasiones, mediante cálculos que generan cambios visuales, como ordenar datos o buscarlos. Está sincronizada de manera incorrecta o JavaScript de larga duración puede ser una causa común de problemas de rendimiento, y para minimizar su impacto siempre que sea posible.

Cálculo de estilo

Cambiar el DOM agregando y quitando elementos, cambiando atributos, clases o reproducir animaciones hace que el navegador recalcular los estilos de los elementos y, en muchos casos, el diseño de una parte o toda la página. Este proceso se denomina cálculo de estilo.

El navegador comienza a calcular estilos creando un conjunto de selectores de coincidencias para determinan qué clases, ID y seudoselectores se aplican a un elemento determinado. Luego, procesa las reglas de estilo de los selectores de coincidencias y descifra y qué estilos finales tiene el elemento.

El rol del recálculo del diseño en la latencia de interacción

Interaction to Next Paint (INP) es un entorno de ejecución centrado en el usuario. métrica de rendimiento que evalúa la capacidad de respuesta general de una página ante las entradas del usuario. Mide la latencia de interacción desde que el usuario interactúa con la página hasta que el navegador pinta el siguiente marco que muestra las actualizaciones visuales correspondientes para la interfaz de usuario.

Un componente significativo de una interacción es el tiempo que tarda en pintar la siguiente marco. El trabajo de renderización realizado para presentar el siguiente fotograma se compone de muchas partes, incluido el cálculo de los estilos de página que se producen justo antes del diseño, la pintura y de la composición del trabajo. Esta guía se enfoca en los costos de cálculo de estilo, pero en la reducción mientras que cualquier parte de la duración total de renderización de la interacción también reduce su latencia.

Reduce la complejidad de tus selectores

La simplificación de los selectores CSS puede ayudar a acelerar los cálculos de estilo de tu página. Los selectores más simples hacen referencia a un elemento en CSS con solo un nombre de clase:

.title {
  /* styles */
}

Pero, a medida que crece cualquier proyecto, es probable que necesite una CSS más compleja, por lo que con selectores que se ven así:

.box:nth-last-child(-n+1) .title {
  /* styles */
}

Para determinar cómo se aplican estos estilos a la página, el navegador debe pregunta "¿es este un elemento con una clase de title con un elemento superior de una clase de ¿box es el elemento secundario menos-nth-plus-1 de su elemento superior? Buscando puede demorar un poco. Para simplificar esto, puedes cambiar el para que sea un nombre de clase más específico:

.final-box-title {
  /* styles */
}

Estos nombres de clase de reemplazo pueden parecer incómodos, pero hacen que de que el trabajo sea mucho más sencillo. En la versión anterior, por ejemplo, para que el navegador sepa un elemento es el último de su tipo, primero debe saber todo acerca de otros elementos para determinar si algún elemento posterior ser el nth-last-child. Esto puede ser mucho más costoso en términos de procesamiento que hacer coincidir un selector con un elemento basándose únicamente en su nombre de clase.

Reduce la cantidad de elementos a los que se les aplica diseño

Otra consideración de rendimiento y, a menudo, es más importante que el selector complejidad) es la cantidad de trabajo que debe ocurrir cuando cambia un elemento.

En general, el peor costo de calcular el estilo de los elementos computados es el número de elementos multiplicado por el conteo del selector, porque el navegador necesita comprobar cada elemento al menos una vez en cada estilo para ver si coincidencias.

Los cálculos de estilo pueden orientarse directamente a algunos elementos en lugar de invalidarlos toda la página. En los navegadores modernos, esto suele ser un problema menor porque el navegador no siempre necesita verificar todos los elementos que puede afectar un cambio. Por otro lado, los navegadores más antiguos no siempre están optimizados para estas tareas. Dónde puedes, debes reducir la cantidad de elementos invalidados.

Mide el costo de recalcular el diseño

Existen dos maneras de medir el costo del nuevo cálculo del estilo en el navegador. Cada uno depende de si deseas medirlo en el navegador. en tu entorno de desarrollo o si quieres medir cuánto tiempo para los usuarios reales en tu sitio web.

Mide el costo del recalcular el estilo en las Herramientas para desarrolladores de Chrome

Una forma de medir el costo de los cálculos nuevos de estilo es usar la columna en Herramientas para desarrolladores de Chrome. Para comenzar, haz lo siguiente:

  1. Abre Herramientas para desarrolladores.
  2. Ve a la pestaña Rendimiento.
  3. Marca la casilla de verificación Estadísticas del selector (opcional).
  4. Haz clic en Grabar.
  5. Interactúa con la página.

Cuando detengas la grabación, verás algo como la siguiente imagen:

Herramientas para desarrolladores que muestran cálculos de estilo.
Un informe de Herramientas para desarrolladores en el que se muestran los cálculos de estilo.

La franja en la parte superior es un gráfico de llamas en miniatura que también traza marcos por por segundo. Cuanto más cerca esté la actividad de la parte inferior de la tira, más rápida que está pintando el navegador. Si ves que el gráfico de llamas se nivela en la parte superior con barras rojas sobre ella, entonces hay trabajo que los fotogramas de larga duración.

Acercando
    un área de problemas en Herramientas para desarrolladores de Chrome en el resumen de la actividad de la extensión de
    de rendimiento en Herramientas para desarrolladores de Chrome.
Fotogramas de larga duración en la actividad de Herramientas para desarrolladores .

Los fotogramas de larga duración durante una interacción, como el desplazamiento, valen la pena más estilo. Si ves un bloque grande de color púrpura, acércate a la actividad y selecciona trabajo etiquetado como Recalculate Style para obtener más información sobre los posibles costoso de recálculo de estilo.

Cómo obtener el
    detalles de los cálculos de estilo de larga duración, incluida la información vital, como
    como la cantidad de elementos afectados por el trabajo de recálculo de estilo.
Un nuevo cálculo de estilo de larga duración que toma solo más de 25 ms en el resumen de Herramientas para desarrolladores.

Cuando haces clic en el evento, se muestra su pila de llamadas. Si el trabajo de renderización se debe a una interacción del usuario, se menciona el JavaScript que activó el cambio de estilo. También muestra el número de elementos que afecta el cambio (un poco más de 900). elementos en este caso, y cuánto tiempo tardó el cálculo de estilo. Puedes usar esta para intentar encontrar una solución en el código.

Si marcaste la casilla de verificación Estadísticas del selector en la configuración del Panel de rendimiento antes de hacer un seguimiento tendrá una pestaña adicional con el mismo nombre.

La tabla de estadísticas del selector CSS
    en el panel de rendimiento de las Herramientas para desarrolladores de Chrome. Esta tabla contiene
    encabezados y los datos correspondientes para cosas como el tiempo transcurrido, buscar
    intentos, recuento de coincidencias, porcentaje de nodos que no coinciden, selectores y
    la hoja de estilo en la que se encuentran.
La tabla de estadísticas del selector, como se muestra en el panel de rendimiento de Chrome Herramientas para desarrolladores.

Este panel brinda datos útiles sobre el costo relativo de cada selector, lo que permite a identificar selectores de CSS costosos.

Para obtener más información, consulta la documentación de estadísticas del selector CSS.

Mide el costo del recálculo del estilo de los usuarios reales

Si quieres saber cuánto tarda el nuevo cálculo del estilo en usuarios reales de tu sitio web, la API de Long Animation Frames te da las herramientas necesarias para hacerlo. Los datos de esta API se agregaron al Biblioteca JavaScript de web-vitals, incluido el tiempo de recálculo del estilo.

Si sospechas que la demora en la presentación de una interacción es lo principal que contribuye al INP de una página, debes averiguar cuánto de ese tiempo recalculando los estilos en la página. Para obtener más información, lee sobre cómo medir el tiempo de recálculo del estilo en el campo.

Recursos

Hero image de Unsplash, de Markus Spiske.