Búsqueda de Economic Times para corregir el INP

Al reducir la TBT en 30 veces y migrar a Next.js, The Ecomonic Times redujo el INP casi cuatro veces, lo que generó una disminución del 50% en el porcentaje de rebote y un aumento del 43% en las vistas de página.

Daya Ram Yadav
Daya Ram Yadav
Saurabh Rajpal
Saurabh Rajpal

Interaction to Next Paint (INP) es una métrica que evalúa la capacidad de respuesta de un sitio web ante la entrada del usuario. Una buena capacidad de respuesta significa que una página responde rápidamente a las interacciones del usuario. Cuanto más bajo sea el INP de una página, mejor podrá responder a las interacciones del usuario.

Los buenos valores de INP son de 200 milisegundos o menos, los valores malos son mayores a 500 milisegundos y cualquier valor intermedio debe mejorarse.

El comienzo confuso

Cuando Google introdujo por primera vez INP como una métrica experimental con el potencial de evolucionar en una de las Métricas web esenciales, el equipo de Economic Times aceptó el desafío antes de que pasara a ser una, ya que proporcionar una experiencia del usuario de primer nivel es crucial para nuestros valores fundamentales de la empresa.

El INP ha sido una de las métricas más difíciles de resolver hasta ahora. Al principio, no era claro cómo medir eficazmente el INP. Lo que dificultó aún más la situación fue la falta de asistencia de la comunidad, incluidos la mayoría de los proveedores de supervisión de usuarios reales (RUM) que aún no lo admitían. Sin embargo, contábamos con herramientas de RUM de Google, como el Informe sobre la experiencia del usuario en Chrome (CrUX) y la biblioteca JavaScript de web-vitals, entre otras herramientas, lo que nos dio una idea de dónde nos ocupamos mientras evaluábamos el camino por delante. Cuando comenzamos, nuestro INP tardaba cerca de 1,000 milisegundos en el nivel del origen.

Algo que surgió mientras se corrige el INP en el campo fue que una de las métricas del lab para segmentar podría ser Tiempo de bloqueo total (TBT). TBT ya estaba bien documentado y con el apoyo de la comunidad. A pesar de que ya cumplimos con los umbrales de las Métricas web esenciales, no nos fuimos tan bien en el frente de TBT, ya que, cuando comenzamos, tardamos más de 3 segundos.

¿Qué es la TBT y qué pasos seguimos para mejorarla?

La TBT es una métrica de lab que mide la capacidad de respuesta de una página web a la entrada del usuario cuando se carga. Cualquier tarea que tarde más de 50 milisegundos en ejecutarse se considera una tarea larga y el tiempo después del umbral de 50 milisegundos se conoce como tiempo de bloqueo.

Para calcular la TB, se suman los tiempos de bloqueo de todas las tareas largas durante la carga de la página. Por ejemplo, si hay dos tareas largas durante la carga, el tiempo de bloqueo se determina de la siguiente manera:

  • La tarea A tarda 80 milisegundos (30 milisegundos más de 50 milisegundos).
  • La tarea B tarda 100 milisegundos (50 milisegundos más que 50 milisegundos).

La TBT de la página será de 80 milisegundos (30 + 50). Cuanto menor sea la TBT, mejor. La TBT también se correlaciona bien con el INP.

A continuación, te mostramos una comparación de lab rápida de nuestra TBT antes y después de implementar medidas para mejorarla:

Una imagen compuesta de tareas largas durante el inicio, como se muestra en el panel de rendimiento de las Herramientas para desarrolladores de Chrome, y un informe de las métricas de la página. El subproceso principal se bloquea durante la carga de la página por 3,260 milisegundos.
El subproceso principal durante el inicio antes de optimizar la TBT. La TBT es de 3,260 milisegundos.
Una imagen compuesta de tareas largas durante el inicio, como se muestra en el panel de rendimiento de las Herramientas para desarrolladores de Chrome, y un informe de las métricas de la página. El subproceso principal se bloquea durante la carga de la página por 120 milisegundos.
El subproceso principal durante el inicio después de la optimización de TBT. La TBT es de 120 milisegundos.

Minimiza el trabajo del subproceso principal

El subproceso principal del navegador controla todo, desde el análisis de HTML y la creación del DOM hasta el análisis de CSS y la aplicación de estilos, y la evaluación y ejecución de JavaScript. El subproceso principal también controla las interacciones del usuario, es decir, hacer clic, presionar y presionar teclas. Si el subproceso principal está ocupado con otras tareas, es posible que no responda de manera eficiente a las entradas del usuario y genere bloqueos en la experiencia del usuario.

Esta fue la tarea más difícil para nosotros, ya que tenemos nuestros propios algoritmos para detectar la identidad de los usuarios y publicar anuncios en función del estado de la suscripción y de las secuencias de comandos de terceros para pruebas A/B, estadísticas y mucho más.

Al principio, dimos pequeños pasos, como reducir la prioridad de la carga de recursos comerciales menos críticos. En segundo lugar, usamos requestIdleCallback para el trabajo no crítico, lo que puede ayudar a reducir la TBT.

if ('requestIdleCallback' in window) {
  this.requestIdleCallbackId = requestIdleCallback(fetchMarketsData.bind(this), {timeout: 3000});
} else {
  fetchMarketsData(); // Fallback in case requestIdleCallback is not supported
}

Se recomienda especificar un tiempo de espera cuando se usa requestIdleCallback, ya que garantiza que, si transcurrió el tiempo especificado y si aún no se llamó a la devolución de llamada, se ejecute inmediatamente después del tiempo de espera.

Minimiza el tiempo de evaluación de la secuencia de comandos

También cargamos de forma diferida bibliotecas de terceros con componentes cargables. También quitamos los elementos JavaScript y CSS sin usar. Para ello, generamos perfiles de la página con la herramienta de cobertura en las Herramientas para desarrolladores de Chrome. Nos ayudó a identificar áreas en las que se necesitaba la eliminación de código no utilizado para enviar menos código durante la carga de la página y, por lo tanto, reducir el tamaño inicial del paquete de la aplicación.

Captura de pantalla de la herramienta de cobertura en las Herramientas para desarrolladores de Chrome. Aquí, la herramienta muestra partes de archivos JavaScript y CSS sin usar durante la carga de la página.

Reduce el tamaño del DOM

Según Lighthouse, los tamaños grandes del DOM aumentan el uso de memoria, provoca recálculos de estilo más largos y produce reprocesamientos de diseño costosos.

Captura de pantalla de la auditoría de tamaño del DOM en Lighthouse. La cantidad de elementos del DOM informados es de 2,706.

Redujimos la cantidad de nodos del DOM de dos maneras:

  • Primero, renderizamos nuestros elementos de menú a pedido del usuario (al hacer clic). Disminuyó el tamaño del DOM en aproximadamente 1,200 nodos.
  • En segundo lugar, cargamos de forma diferida widgets menos importantes.

Debido a todos estos esfuerzos, redujimos la TBT de manera significativa, y nuestro INP también se redujo en casi un 50%:

Captura de pantalla de la auditoría de INP en CrUX. El INP de la página es de 539 milisegundos, por lo que supera el umbral "poco".

En este punto, casi nos quedamos sin victorias sencillas para reducir aún más el TBT (y el INP por proxy), pero sabíamos que teníamos mucho margen para mejorar. Fue entonces cuando decidimos actualizar nuestro código estándar de IU personalizada a la versión más reciente de React junto con Next.js para aprovechar mejor los hooks y evitar la repetición innecesaria de componentes.

Debido a actualizaciones más frecuentes y un tráfico comparativamente menor en comparación con otras partes del sitio web, comenzamos a migrar nuestras páginas de temas a Next.js. También usamos PartyTown para transferir a los trabajadores web más trabajo pesado del subproceso principal, junto con técnicas como requestIdleCallBack para diferir las tareas no críticas.

¿Cómo ayudó a The Economic Times mejorar el INP?

INP y TBT actuales en el origen

Al momento de publicar esta publicación, la TBT de nuestro origen era de 120 milisegundos, en comparación con los 3,260 milisegundos que vimos cuando comenzamos nuestros esfuerzos de optimización. De manera similar, el INP de nuestro origen fue de 257 milisegundos después de nuestros esfuerzos de optimización, en comparación con más de 1,000 milisegundos.

Captura de pantalla de la auditoría de INP en CrUX. El INP de la página es de 257 milisegundos, que está dentro del umbral de "se necesita mejorar".

Tendencia de INP CrUX

El tráfico recibido en las páginas de temas representa una porción significativamente menor del tráfico general. Por lo tanto, era un lugar ideal para la experimentación. Los resultados de CrUX y los resultados comerciales fueron muy alentadores y nos llevaron a ampliar nuestros esfuerzos en todo el sitio web para obtener más beneficios.

Captura de pantalla de las distribuciones de INP tal como se visualizan en CrUX durante un período de cuatro meses, a partir de julio de 2022 y hasta octubre de 2022. Los valores dentro de los umbrales “deficiente” y “necesita mejoras” disminuyeron un poco, mientras que los valores dentro del umbral “bueno” aumentaron.

Análisis TBT de Akamai mPulse

Utilizamos Akamai mPulse como nuestra solución de RUM, que mide la TBT en el campo. Observamos una disminución constante en la TBT, que refleja claramente los resultados de nuestros esfuerzos para reducir el INP. Como se puede ver en la siguiente captura de pantalla, los valores TBT eventualmente disminuyeron de unos 5 segundos a unos 200 milisegundos en el campo.

Captura de pantalla de un gráfico publicado en Akamai mPulse que muestra una disminución de la TBT durante el transcurso de aproximadamente un mes

Resultado empresarial

En general, nuestros esfuerzos por reducir la TBT en 30 veces y la migración a Next.js nos permitieron reducir el INP casi 4 veces, lo que finalmente generó una disminución del 50% en el porcentaje de rebote y un aumento del 43% en las vistas de página en las páginas de temas.

Captura de pantalla de Google Analytics que compara las vistas de página con el porcentaje de rebote. Gracias a las optimizaciones realizadas al INP en el sitio web de The Economic Times, se logró una disminución del 50% en el porcentaje de rebote y un aumento del 43% en las vistas de página.

Conclusión

En resumen, el INP ayudó en gran medida a determinar los problemas de rendimiento durante el tiempo de ejecución en partes del sitio web de Economic Times. Está demostrado ser una de las métricas más eficaces para tener un impacto positivo en los resultados comerciales. Debido a las cifras muy alentadoras que hemos observado como resultado de este esfuerzo, nos vemos motivados a ampliar nuestros esfuerzos de optimización a otras áreas de nuestro sitio web y cosechar beneficios adicionales.