Optimización de las Métricas web con Lighthouse

Encuentra oportunidades para mejorar la experiencia del usuario con las herramientas web de Chrome.

Publicación: 11 de mayo de 2021

Hoy, abordaremos las nuevas funciones de las herramientas de Lighthouse, PageSpeed y DevTools para ayudarte a identificar cómo tu sitio puede mejorar en las Web Vitals.

A modo de repaso, Lighthouse es una herramienta automatizada de código abierto que sirve para mejorar la calidad de las páginas web. Puedes encontrarla en el paquete de herramientas de depuración de Herramientas para desarrolladores de Chrome y ejecutarla en cualquier página web, ya sea pública o que requiera autenticación. También puedes encontrar Lighthouse en PageSpeed Insights, CI y WebPageTest.

Lighthouse 7.x incluye nuevas funciones, como capturas de pantalla de elementos, para facilitar la inspección visual de partes de tu IU que afectan las métricas de la experiencia del usuario (p.ej., qué nodos contribuyen al cambio de diseño).

También lanzamos la compatibilidad con capturas de pantalla de elementos en PageSpeed Insights, lo que permite detectar con mayor facilidad los problemas de las ejecuciones de rendimiento únicas de las páginas.

Capturas de pantalla de elementos que destacan el nodo del DOM que contribuye al cambio de diseño en la página

Mide las Métricas web esenciales

Lighthouse puede medir de forma sintética las métricas de las Métricas web esenciales, incluidas Largest Contentful Paint, Cumulative Layout Shift y Total Blocking Time (un proxy de lab para First Input Delay). Estas métricas reflejan la carga, la estabilidad del diseño y la preparación para la interacción. También se incluyen otras métricas, como el First Contentful Paint, que se destaca en el futuro de las Core Web Vitals.

La sección "Métricas" del informe de Lighthouse incluye versiones de laboratorio de estas métricas. Puedes usar esta vista como un resumen de los aspectos de la experiencia del usuario que requieren tu atención.

Métricas de rendimiento de Lighthouse
Carril de Web Vitals en el panel de rendimiento de Herramientas para desarrolladores
La nueva opción Web Vitals en el panel Rendimiento de las Herramientas para desarrolladores muestra un segmento que destaca los momentos de las métricas, como el cambio de diseño (LS) que se muestra arriba.

Las métricas de campo, como las que se encuentran en el Informe sobre la UX de Chrome o la RUM, no tienen esta limitación y son un complemento valioso para los datos de laboratorio, ya que reflejan la experiencia de los usuarios reales. Los datos de campo no pueden ofrecer el tipo de información de diagnóstico que obtienes en el lab, por lo que ambos van de la mano.

Identifica dónde puedes mejorar las Web Vitals

Identifica el elemento de Largest Contentful Paint

El LCP es una medición de la experiencia de carga percibida. Marca el punto durante la carga de la página en el que se cargó el contenido principal o "más grande" y es visible para el usuario.

Lighthouse tiene una auditoría de "Elemento de Largest Contentful Paint" que identifica qué elemento fue el Largest Contentful Paint. Si colocas el cursor sobre el elemento, se destacará en la ventana principal del navegador.

Elemento de Largest Contentful Paint

Si este elemento es una imagen, esta información es una sugerencia útil de que tal vez quieras optimizar la carga de esta imagen. Lighthouse incluye una serie de auditorías de optimización de imágenes para ayudarte a comprender si tus imágenes se podrían comprimir, cambiar de tamaño o entregar en un formato de imagen moderno más óptimo.

Auditoría de imágenes con tamaño adecuado

También puede resultarte útil el bookmarklet de LCP de Annie Sullivan para identificar rápidamente el elemento de LCP con un rectángulo rojo en un solo clic.

Cómo destacar el elemento LCP con un bookmarklet

Precarga las imágenes que se descubren tarde para mejorar el LCP

Para mejorar el Largest Contentful Paint, precarga tus imágenes hero críticas si el navegador las descubre tarde. Un descubrimiento tardío puede ocurrir si se debe cargar un paquete de JavaScript antes de que se pueda descubrir la imagen.

Precarga la imagen de Largest Contentful Paint

Hay algunas preguntas frecuentes que recibimos sobre la carga previa de imágenes de LCP que también puede ser útil responder brevemente.

¿Se pueden precargar imágenes responsivas? Sí. Supongamos que tenemos una imagen hero responsiva, como se especifica con srcset y sizes a continuación:

<img src="lighthouse.jpg"
          srcset="lighthouse_400px.jpg 400w,
                  lighthouse_800px.jpg 800w,
                  lighthouse_1600px.jpg 1600w" sizes="50vw" alt="A helpful
Lighthouse">

Gracias a los atributos imagesrcset y imagesizes agregados al atributo link, podemos precargar una imagen responsiva con la misma lógica de selección de imágenes que usan srcset y sizes:

<link rel="preload" as="image" href="lighthouse.jpg"
           imagesrcset="lighthouse_400px.jpg 400w,
                        lighthouse_800px.jpg 800w,
                        lighthouse_1600px.jpg 1600w"
imagesizes="50vw">

¿La auditoría también destacará las oportunidades de precarga si la imagen del LCP se define a través de un fondo de CSS? Sí.

Cualquier imagen marcada como la imagen de LCP, ya sea a través del fondo de CSS o de <img>, es candidata si se descubre con una profundidad de cascada de tres o más.

Carga diferida de imágenes fuera de pantalla y cómo evitarla para el LCP

Las imágenes fuera de pantalla que no son fundamentales para la experiencia inicial del usuario se pueden cargar de forma diferida. Esta es una técnica que difiere la descarga de una imagen hasta que un usuario se desplaza cerca de ella, lo que puede reducir la contención de red para los recursos críticos y, en algunos casos, mejorar el LCP. La auditoría "Diferir las imágenes fuera de pantalla" puede ser útil en este caso:

Difiere las imágenes fuera de pantalla

Las imágenes fundamentales de la mitad superior de la página, como la imagen de Largest Contentful Paint, no se deben cargar de forma diferida. Si lo haces, se puede retrasar la carga de la imagen del LCP. Lighthouse destacará si una imagen de LCP se carga de forma diferida de manera incorrecta a través de la auditoría "La imagen de Largest Contentful Paint se cargó de forma diferida":

Evita la carga diferida de imágenes de LCP

Identifica las contribuciones al CLS

El Cumulative Layout Shift es una medición de la estabilidad visual. Cuantifica cuánto se desplaza visualmente el contenido de una página. Lighthouse tiene una auditoría para depurar el CLS llamada "Evita cambios de diseño grandes".

Esta auditoría destaca los elementos del DOM que más contribuyen a los cambios de la página. En la columna Element, a la izquierda, verás la lista de estos elementos del DOM y, a la derecha, su contribución general al CLS.

La auditoría de Lighthouse para evitar cambios de diseño grandes destaca los nodos del DOM relevantes que contribuyen al CLS

Gracias a la nueva función Capturas de pantalla de elementos de Lighthouse, podemos ver una vista previa visual de los elementos clave que se indican en la auditoría, así como hacer clic para ampliar y obtener una vista más clara:

Si haces clic en la captura de pantalla de un elemento, se expandirá.

Para el CLS posterior a la carga, puede ser útil visualizar de forma persistente con rectángulos qué elementos contribuyeron más al CLS. Esta es una función que encontrarás en herramientas de terceros, como el panel de métricas web de SpeedCurve, y para la que me encanta usar el generador de GIF de cambios de diseño de Defaced:

el generador de cambios de diseño que destaca los cambios

Para obtener una vista de todo el sitio de los problemas de cambios de diseño, aprovecho mucho el informe de Métricas web esenciales de Search Console. Esto me permite ver los tipos de páginas de mi sitio con un CLS alto (en este caso, me ayuda a identificar por mi cuenta en qué parciales de plantilla debo dedicar mi tiempo):

Search Console muestra problemas de CLS

Identifica el CLS de imágenes sin dimensiones

Para limitar el Cumulative Layout Shift que causan las imágenes sin dimensiones, incluye atributos de tamaño de ancho y alto en tus imágenes y elementos de video. Este enfoque garantiza que el navegador pueda asignar la cantidad correcta de espacio en el documento mientras se carga la imagen.

Auditoría de elementos de imagen sin ancho ni altura explícitos

Consulta Setting Height And Width On Images Is Important Again para obtener un buen artículo sobre la importancia de pensar en las dimensiones y la relación de aspecto de las imágenes.

Cómo identificar el CLS de los anuncios

Anuncios de publicador para Lighthouse te permite encontrar oportunidades para mejorar la experiencia de carga de los anuncios en tu página, incluidas las contribuciones a los cambios de diseño y las tareas largas que pueden retrasar el momento en que los usuarios pueden usar tu página. En Lighthouse, puedes habilitar esta opción a través de los complementos de la comunidad.

Auditorías relacionadas con los anuncios que destacan las oportunidades para reducir el tiempo de solicitud y el cambio de diseño

Recuerda que los anuncios son uno de los factores que más contribuyen a los cambios de diseño en la Web. Es importante tener en cuenta lo siguiente:

  • Ten cuidado cuando coloques anuncios no fijos cerca de la parte superior del viewport
  • Elimina los cambios reservando el tamaño más grande posible para el espacio publicitario.

Evita las animaciones no compuestas

Las animaciones que no están compuestas pueden verse entrecortadas en dispositivos de gama baja si las tareas pesadas de JavaScript mantienen ocupado el subproceso principal. Estas animaciones pueden generar cambios de diseño.

Si Chrome descubre que no se pudo componer una animación, lo informa a un seguimiento de las Herramientas para desarrolladores que lee Lighthouse, lo que le permite enumerar qué elementos con animaciones no se compusieron y por qué motivo. Puedes encontrarlas en la auditoría Evita las animaciones no compuestas.

Auditoría para evitar las animaciones no compuestas

Depura First Input Delay, Total Blocking Time y tareas largas

La primera entrada mide el tiempo que transcurre desde que un usuario interactúa por primera vez con una página (p.ej., cuando hace clic en un vínculo, presiona un botón o usa un control personalizado con tecnología de JavaScript) hasta que el navegador puede comenzar a procesar los controladores de eventos en respuesta a esa interacción. Las tareas de JavaScript largas pueden afectar esta métrica y su proxy, el tiempo de bloqueo total.

Auditoría para evitar tareas largas en el subproceso principal

Lighthouse incluye una auditoría de Evita tareas largas en el subproceso principal que enumera las tareas más largas en el subproceso principal. Esto puede ser útil para identificar las tareas que más contribuyen al mayor retraso de entrada. En la columna izquierda, podemos ver la URL de las secuencias de comandos responsables de las tareas largas del subproceso principal.

A la derecha, podemos ver la duración de estas tareas. Como recordatorio, las tareas largas son aquellas que se ejecutan durante más de 50 milisegundos. Se considera que esto bloquea el subproceso principal durante el tiempo suficiente para afectar la velocidad de fotogramas o la latencia de entrada.

Si estás considerando servicios de terceros para la supervisión, también me gusta bastante la línea de tiempo de ejecución del subproceso principal que tiene Calibre para visualizar estos costos, que destaca las tareas superiores y secundarias que contribuyen a las tareas largas que afectan la interactividad.

La línea de tiempo visual de la ejecución del subproceso principal que tiene Calibre

Bloquea las solicitudes de red para ver el impacto antes y después en Lighthouse

Las Herramientas para desarrolladores de Chrome admiten el bloqueo de solicitudes de red para ver el impacto de la eliminación o la falta de disponibilidad de recursos individuales. Esto puede ser útil para comprender el costo que tienen las secuencias de comandos individuales (p. ej., incorporaciones o herramientas de seguimiento de terceros) en métricas como Total Blocking Time (TBT) y Time to Interactive.

El bloqueo de solicitudes de red también funciona con Lighthouse. Veamos rápidamente el informe de Lighthouse de un sitio. La puntuación de rendimiento es de 63/100 con un TBT de 400 ms. Si analizamos el código, vemos que este sitio carga un polyfill de Intersection Observer en Chrome, lo que no es necesario. ¡Bloqueémoslo!

Bloqueo de la solicitud de red

Podemos hacer clic con el botón derecho en una secuencia de comandos en el panel de redes de Herramientas para desarrolladores y hacer clic en Block Request URL para bloquearla. Aquí lo haremos para el polyfill de Intersection Observer.

Cómo bloquear URLs de solicitud en las Herramientas para desarrolladores

A continuación, podemos volver a ejecutar Lighthouse. Esta vez, podemos ver que nuestra puntuación de rendimiento mejoró (70/100), al igual que el tiempo de bloqueo total (400 ms => 300 ms).

La vista posterior al bloqueo de solicitudes de red costosas

Reemplaza las incorporaciones costosas de terceros por una fachada

Es común usar recursos de terceros para incorporar videos, publicaciones de redes sociales o widgets en las páginas. De forma predeterminada, la mayoría de los elementos incorporados se cargan de inmediato y pueden incluir cargas útiles costosas que afectan negativamente la experiencia del usuario. Esto es un desperdicio si el tercero no es fundamental (p.ej., si el usuario necesita desplazarse antes de verlo).

Un patrón para mejorar el rendimiento de esos widgets es cargarlos de forma diferida en la interacción del usuario. Para ello, puedes renderizar una vista previa ligera del widget (una fachada) y cargar la versión completa solo si un usuario interactúa con ella. Lighthouse tiene una auditoría que recomendará recursos de terceros que se pueden cargar de forma diferida con una fachada, como los videos de YouTube incorporados.

Auditoría que destaca que se pueden reemplazar algunos recursos costosos de terceros

Como recordatorio, Lighthouse destacará el código de terceros que bloquee el subproceso principal durante más de 250 ms. Esto puede exponer todo tipo de secuencias de comandos de terceros (incluidas las creadas por Google) que puede ser mejor aplazar o cargar de forma diferida si lo que renderizan requiere desplazarse para verlo.

Reduce el costo de la auditoría de JavaScript de terceros

Más allá de las Métricas web esenciales

Además de destacar las Core Web Vitals, las versiones recientes de Lighthouse y PageSpeed Insights también intentan proporcionar orientación concreta que puedes seguir para mejorar la rapidez con la que se pueden cargar las aplicaciones web con mucho código de JavaScript si tienes activados los mapas de origen.

Estas incluyen una colección cada vez mayor de auditorías para reducir el costo de JavaScript en tu página, como reducir la dependencia de polyfills y duplicados que podrían no ser necesarios para la experiencia del usuario.

Para obtener más información sobre las herramientas de Core Web Vitals, consulta la cuenta de Twitter del equipo de Lighthouse y Novedades de las Herramientas para desarrolladores.