En un par de meses, el sitio web de noticias líder del Reino Unido logró mejorar su CLS de percentil 75 en un 250%, de 0.25 a 0.1.
El desafío de estabilidad visual
Los cambios de diseño pueden ser muy molestos. En Telegraph Media Group (TMG), la estabilidad visual es particularmente importante porque los lectores usan principalmente nuestras aplicaciones para consumir noticias. Si el diseño cambia mientras lee un artículo, es probable que el lector pierda su lugar. Esta puede ser una experiencia frustrante y que distraiga a los usuarios.
Desde una perspectiva de ingeniería, asegurarse de que las páginas no cambien ni interrumpan al lector puede ser un desafío, especialmente cuando áreas de tu aplicación se cargan de forma asíncrona y se agregan a la página de forma dinámica.
En TMG, contamos con varios equipos que contribuyen a la generación de código del cliente:
- Ingeniería básica. Implementar soluciones de terceros para potenciar áreas como los comentarios y las recomendaciones de contenido
- Marketing. Ejecutar pruebas A/B para evaluar cómo interactúan los lectores con las funciones o los cambios nuevos
- Publicidad. Administrar las solicitudes y ofertas previas de anuncios
- Requisitos editoriales. Incorporar código en artículos como tweets o videos, así como widgets personalizados (por ejemplo, la herramienta de seguimiento de casos de coronavirus)
Garantizar que cada uno de estos equipos no provoque que el diseño de la página se sacude puede ser difícil. Mediante el uso de la métrica Cambio de diseño acumulado para medir la frecuencia con la que se produce a nuestros lectores, los equipos obtuvieron más estadísticas sobre la experiencia real del usuario y un objetivo claro por el cual esforzarse. Esto dio como resultado que el CLS del percentil 75 mejorara de 0.25 a 0.1 y que nuestro bucket de aprobación creciera del 57% al 72%.
El 250%
Mejora del CLS en el percentil 75
15%
Más usuarios con una buena puntuación de CLS
Donde comenzamos
Con los paneles de CrUX, pudimos establecer que nuestras páginas cambiaban más de lo que queríamos.
Idealmente, queríamos que al menos el 75% de nuestros lectores tuvieran una "buena" experiencia, por lo que comenzamos a identificar las causas de la inestabilidad del diseño.
Cómo medimos los cambios de diseño
Usamos una combinación de Chrome DevTools y WebPageTest para ayudar a reconocer la causa del cambio del diseño. En Herramientas para desarrolladores, usamos la sección Experiencia de la pestaña Rendimiento para destacar instancias individuales de cambio de diseño y cómo contribuyeron a la puntuación general.
WebPageTest destaca de manera útil dónde se produce el cambio de diseño en la vista de cronograma cuando se selecciona "Destacar cambios de diseño".
Después de revisar cada turno en las plantillas más visitadas, se nos ocurrió una lista de ideas sobre cómo podríamos mejorar.
Cómo reducir los cambios de diseño
Nos enfocamos en cuatro áreas en las que podríamos reducir los cambios de diseño: - anuncios - imágenes - encabezados - incorporaciones
Anuncios
Los anuncios se cargan después del procesamiento de imagen inicial a través de JavaScript. Algunos de los contenedores en los que cargaron no tenían ninguna altura reservada.
Aunque no sabemos la altura exacta, podemos reservar espacio mediante el tamaño de anuncio más común cargado en el espacio.
En algunos casos, habíamos juzgado erróneamente la altura promedio del anuncio. Para los lectores de tablets, la ranura se estaba contrayendo.
Revisamos el espacio y ajustamos la altura para usar el tamaño más común.
Imágenes
Muchas de las imágenes del sitio web se cargan de forma diferida y tienen su espacio reservado para ellas.
Sin embargo, las imágenes intercaladas en la parte superior de los artículos no tenían espacio reservado en el contenedor ni tenían atributos de ancho y alto asociados con las etiquetas. Esto provocó que el diseño cambiara a medida que se cargaran.
Simplemente agregar los atributos de ancho y alto a las imágenes garantizó que no se cambiara el diseño.
Encabezado
El encabezado estaba debajo del contenido en el lenguaje de marcado y se colocó en la parte superior con CSS. La idea original era priorizar la carga del contenido antes de la navegación, pero esto hacía que la página se cambiara temporalmente.
Mover el encabezado a la parte superior del lenguaje de marcado permitió que la página se renderice sin este cambio.
Incorporaciones
Algunas de las incorporaciones de uso frecuente tienen una relación de aspecto definida. Por ejemplo, los videos de YouTube. Mientras se carga el reproductor, extraemos la miniatura de YouTube y la usamos como marcador de posición mientras se carga el video.
Medición del impacto
Pudimos medir el impacto a nivel del atributo con bastante facilidad mediante las herramientas mencionadas al comienzo del artículo. Sin embargo, queríamos medir la métrica CLS a nivel de plantilla y del sitio. De manera sintética, usamos SpeedCurve para validar los cambios en la preproducción y la producción.
Luego, podemos validar los resultados en los datos de RUM (proporcionados por mPulse) una vez que el código alcanza la producción.
La verificación de los datos de RUM nos proporciona un buen nivel de confianza en que los cambios que hacemos tienen un impacto positivo para nuestros lectores.
Las últimas cifras que analizamos corresponden a los datos RUM que recopila Google. Esto es especialmente relevante ahora, ya que pronto tendrán un impacto en la clasificación de la página. Para comenzar, usamos el Informe de UX de Chrome, en los datos mensuales de nivel de origen disponibles a través del panel de CrUX y mediante consultas en BigQuery para recuperar datos históricos de P75. De esta manera, pudimos ver con facilidad que, para todo el tráfico medido por CrUX, nuestro CLS del percentil 75 mejoró en un 250%, de 0.25 a 0.1, y que nuestro bucket de pasar creció de un 57% a un 72%.
Además, pudimos usar la API de Chrome UX Report y crear algunos paneles internos divididos en plantillas.
Evita las regresiones de CLS
Un aspecto importante para mejorar el rendimiento es evitar regresiones. Configuramos algunos presupuestos de rendimiento básicos para nuestras métricas clave y, luego, incluimos CLS en ellas.
Si la prueba supera el presupuesto, se enviará un mensaje a un canal de Slack para que podamos investigar la causa. También configuramos informes semanales para que, incluso si las plantillas se mantienen en el presupuesto, estamos al tanto de cualquier cambio que haya tenido un impacto negativo.
También planeamos expandir nuestros presupuestos para usar datos de RUM y datos sintéticos, mediante el uso de mPulse para configurar alertas estáticas y, potencialmente, la detección de anomalías, lo que nos permitirá estar al tanto de cualquier cambio fuera de lo común.
Es importante que nos enfoquemos en los nuevos atributos con el CLS en mente. Muchos de los cambios que mencioné son aquellos que tuvimos que corregir después de lanzarlos a nuestros lectores. La estabilidad del diseño se tendrá en cuenta para el diseño de la solución de cualquier función nueva en el futuro, de modo que podamos evitar cambios de diseño inesperados desde el principio.
Conclusión
Las mejoras que realizamos hasta ahora fueron bastante fáciles de implementar y tuvieron un impacto significativo. Muchos de los cambios que describí en este artículo no llevaron mucho tiempo y se aplicaron a todas las plantillas de uso general, lo que significa que tuvieron un impacto positivo generalizado para nuestros lectores.
Todavía hay áreas del sitio que debemos mejorar. Estamos explorando formas de hacer más de la lógica del lado del cliente en el servidor, lo que mejorará aún más el CLS. Seguiremos haciendo un seguimiento y supervisando nuestras métricas con el objetivo de mejorarlas constantemente y proporcionar a nuestros lectores la mejor experiencia del usuario posible.