Emojis ralentizan web: la inesperada causa del problema

Fuentes: A Broken Heart

Este artículo relata una experiencia de depuración inusual en un proyecto web, donde un problema de rendimiento severo se originó no en el código React como se sospechó inicialmente, sino en una fuente de emoji específica: Noto Color Emoji. El autor, tras notar una ralentización significativa en la carga de un dashboard, inicialmente culpó a React, un marco de trabajo común en el desarrollo frontend. Sin embargo, tras una investigación más profunda con la ayuda de un modelo de lenguaje como Claude, se descubrió que el problema no radicaba en React, sino en el renderizado de la página en Safari.

El proceso de depuración involucró la eliminación sistemática de posibles causas, utilizando una técnica de búsqueda binaria guiada por Claude. Inicialmente se descartaron problemas del servidor, otros scripts de terceros y la compatibilidad entre navegadores. El uso del inspector de rendimiento de Safari reveló que el cuello de botella se encontraba en la fase de 'Layout', consumiendo un porcentaje inusualmente alto de la CPU. Finalmente, se identificó que la inclusión de un simple emoji (❤️) en un botón era la causa directa de la lentitud extrema.

La raíz del problema reside en la forma en que Safari maneja las fuentes de color, específicamente Noto Color Emoji, que utiliza una especificación llamada COLRv1. Esta especificación, diseñada para mejorar el rendimiento en otros navegadores, parece provocar una regresión significativa en Safari, obligándolo a recurrir a un renderizado SVG lento para los emojis. El artículo explica brevemente la historia de las fuentes de emojis, desde las primeras implementaciones de Apple hasta la estandarización de COLRv1.

La lección principal es que incluso los componentes aparentemente triviales, como un emoji, pueden tener un impacto significativo en el rendimiento de una aplicación web, especialmente en navegadores específicos. El autor destaca la utilidad de los modelos de lenguaje como Claude para acelerar el proceso de depuración, no solo identificando el problema sino también sugiriendo posibles causas. Finalmente, el artículo concluye con la importancia de crear casos de reproducción mínimos para reportar bugs a los desarrolladores de navegadores y la necesidad de evitar el uso de Noto Color Emoji en plataformas Apple hasta que el problema sea resuelto.