Cargando
github css modules react performance
Desarrollo webPor SDX Development

Compartir este artículo

LinkedInFacebookXWhatsAppE-mail

En su experiencia publicada el 25 de septiembre de 2026, GitHub indica que ha completado una migración llevada a cabo durante varios años: desde junio de 2026, su arquitectura de estilos en github.com se basa íntegramente en CSS Modules, sin styled-components, styled-system ni la prop sx.

Puntos clave

Mejoras reales, pero contextualizadas

GitHub informa de una reducción del 55 % del tiempo de renderizado del servidor en una medición tras la migración de Primer, y después de mejoras de aproximadamente entre el 1 % y el 22 % en distintas páginas. Estos resultados describen su entorno: no predicen los beneficios de una migración en otra aplicación React.

Por qué CSS-in-JS se volvió costoso para GitHub

CSS-in-JS respondía a necesidades concretas en Primer, el sistema de diseño de GitHub. Los estilos permanecían cerca de los componentes, los design tokens estaban integrados en la API y TypeScript facilitaba el autocompletado. Con sx, los desarrolladores podían personalizar un componente a partir de un objeto JavaScript.

Según GitHub, las dificultades adquirieron importancia alrededor de 2023, con el aumento del número de componentes en algunas páginas. En una solución CSS-in-JS ejecutada en runtime, el procesamiento de los estilos acompaña la ejecución de la aplicación. Repetido en cientos o miles de componentes, este trabajo puede volverse significativo.

01

Interpretar los estilos

Los objetos y sus variaciones deben procesarse para determinar las reglas aplicables al componente.

02

Gestionar las clases

La biblioteca genera o recupera las clases correspondientes a los estilos, según su funcionamiento y sus mecanismos de caché.

03

Preparar el renderizado del servidor

La recopilación de estilos puede añadir trabajo al renderizado de los componentes antes del envío de la página.

04

Inicializar en el navegador

El procesamiento y la inyección de estilos pueden contribuir al coste de inicialización de la interfaz.

Estos mecanismos varían según las bibliotecas. Por tanto, hay que distinguir el CSS-in-JS ejecutado en runtime de las soluciones que extraen los estilos durante el build: no presentan necesariamente los mismos costes.

CSS Modules: conservar los componentes y trasladar el trabajo

CSS Modules permite asociar una hoja de estilos a un componente y, al mismo tiempo, hacer que los nombres de las clases sean locales al módulo de forma predeterminada. El componente importa una correspondencia de nombres de clases; las herramientas transforman esos nombres para evitar colisiones.

GitHub conserva así una organización orientada a componentes, pero produce hojas de estilos sin depender del mismo procesamiento JavaScript de los estilos durante el renderizado.

CSS-in-JS en runtime

Una API dinámica cercana al componente

La lógica de estilos puede utilizar directamente las propiedades del componente. Esta comodidad debe sopesarse frente al coste de procesamiento medido en la aplicación.

CSS Modules

CSS local preparado durante el build

Los archivos CSS siguen vinculados explícitamente a los componentes. Las variantes pueden apoyarse en clases, atributos y variables CSS.

Los estilos dinámicos no desaparecen

Pasarse a CSS Modules no impide utilizar temas ni cambiar la apariencia. Las variables CSS permiten, en particular, variar colores o espaciados sin reconstruir todas las reglas en JavaScript. En cambio, los comportamientos que antes proporcionaba la biblioteca deben identificarse y retomarse explícitamente.

¿Qué mejoras midió GitHub?

Las mediciones abarcan varias etapas y varios ámbitos. No deben sumarse ni interpretarse como una aceleración global equivalente de github.com.

Ámbito comunicado Indicador Resultado
Tras la migración de los componentes de Primer afectados Tiempo de renderizado del servidor de una página −55 %
Tras la migración de Primer Tiempo de inicialización de los componentes −25 %
Migración ampliada a distintas páginas de github.com Tiempo de renderizado del servidor según la página Aproximadamente entre −1 % y −22 %
Benchmark interno de Primer con 1 000 componentes Inyección de CSS en runtime frente a archivos CSS estáticos 242 ms frente a 96 ms

La dispersión de los resultados es reveladora. El número de componentes, las variaciones de estilos y el peso de los demás procesos cambian de una página a otra. Una reducción importante en un caso exigente no garantiza el mismo resultado en una interfaz más sencilla.

Punto de atención

Un renderizado del servidor más rápido no es una promesa SEO

Reducir el trabajo del servidor o de JavaScript puede mejorar la experiencia del usuario. Sin embargo, no garantiza ninguna mejora automática en el LCP, el INP o el posicionamiento: las imágenes, las llamadas a la API, los scripts de terceros, la caché y la lógica de negocio pueden seguir siendo los principales obstáculos.

Una migración progresiva en lugar de una reescritura

GitHub comenzó por Primer. Para cada componente, una implementación en CSS Modules se colocaba detrás de un feature flag, se comparaba con la anterior mediante pruebas de regresión visual y después se desplegaba progresivamente. Esta primera fase terminó en diciembre de 2024 para los componentes afectados.

Mantener la compatibilidad con lo existente

El código de github.com todavía contenía aproximadamente 7 760 props sx en abril de 2025. GitHub utilizó una capa intermedia, @primer/styled-react, para que estos usos siguieran funcionando durante la transición. Después, un equipo de ocho ingenieros convirtió 6 419 props sx en seis meses.

Esta coexistencia temporal evitó imponer un cambio único a toda la base de código. Permitió avanzar paquete por paquete, con un ámbito de validación más manejable.

Automatizar las transformaciones conocidas

GitHub desarrolló una extensión de Visual Studio Code y un codemod para facilitar las conversiones. Al retomar la última fase en abril de 2026, quedaban 895 apariciones de sx. GitHub informa de que las eliminó en tres semanas con dos ingenieros y varios agentes de GitHub Copilot.

Este resultado corresponde a una transformación ya definida y equipada con herramientas. La automatización acelera las modificaciones repetitivas; no exime de verificar los estilos dinámicos, el responsive, la accesibilidad y las regresiones.

Desacoplar el sistema de temas

El último obstáculo no se limitaba a las props sx. Parte del sistema de temas todavía dependía de styled-components. GitHub tuvo que desacoplar esta lógica y apoyarse más en las variables CSS de Primer, especialmente para sus distintos temas y variantes de alto contraste.

Es un punto importante para las aplicaciones SaaS: trasladar las declaraciones CSS no basta si la biblioteca también gestiona los temas, los tokens o comportamientos heredados.

¿Hay que abandonar styled-components en una aplicación React?

No, no basándose únicamente en la experiencia de GitHub. Una arquitectura productiva y suficientemente eficaz no necesita sustituirse porque otra empresa se enfrente a limitaciones diferentes.

Conservar lo existente

El estilizado no es un obstáculo medido

Si el rendimiento responde a las necesidades, si la dinámica de los estilos resulta útil y si la migración aporta pocos beneficios, conservar CSS-in-JS puede ser la opción más razonable.

Probar una alternativa

El runtime representa un coste significativo

Las páginas muy cargadas, un SSR costoso o una mayoría de estilos estáticos pueden justificar un prototipo en CSS Modules para comparar implementaciones equivalentes.

Para un proyecto nuevo, partir de las limitaciones

CSS Modules es una opción pertinente para utilizar CSS estándar con un ámbito local y limitar el runtime dedicado a los estilos. No es la única vía: el CSS estructurado, las clases utilitarias o la generación durante el build también pueden responder a la necesidad. El sistema de diseño, las competencias del equipo y las exigencias de personalización siguen siendo determinantes.

Cómo evaluar una migración sin equivocarse de prioridad

Antes de modificar la arquitectura, establezca una referencia en páginas representativas, incluida una interfaz especialmente cargada. El protocolo debe mantener los mismos componentes, contenidos, comportamientos y condiciones de prueba.

Seis pasos antes de una migración generalizada

  1. Perfilar lo existente. Aislar el coste del estilizado de las llamadas a la API, la base de datos y la lógica de negocio.
  2. Elegir un piloto. Probar una familia de componentes suficientemente utilizada para producir mediciones útiles.
  3. Comparar con funcionalidades equivalentes. Conservar las variantes, los temas y los estados interactivos.
  4. Asegurar el despliegue. Utilizar feature flags, pruebas visuales y una posibilidad de volver atrás.
  5. Automatizar con revisión. Confiar las transformaciones repetitivas a las herramientas y revisar los casos complejos.
  6. Decidir según los resultados. Ampliar la migración solo si las mejoras justifican su coste y sus riesgos.

Medir el servidor y el navegador

Para una aplicación SSR, siga el tiempo de renderizado, la CPU por solicitud y la memoria. Complételo con el TTFB, los volúmenes de JavaScript y CSS transferidos, la hidratación y las mediciones de LCP e INP entre usuarios reales. Estos indicadores describen dimensiones diferentes: una mejora en uno no garantiza una mejora en los demás.

Incluir el coste de mantenimiento

Una decisión de arquitectura no se reduce a un benchmark. El tiempo de migración, la compatibilidad del sistema de diseño, la cobertura de pruebas y la facilidad de contribución deben formar parte de la evaluación.

La principal enseñanza: conservar una arquitectura evolutiva

La experiencia de GitHub muestra que una solución cómoda al principio de un proyecto puede resultar menos adecuada a otra escala. También muestra que un cambio profundo puede llevarse a cabo progresivamente, sin reescribir toda la aplicación.

Medir, probar en un ámbito reducido, preservar la compatibilidad y validar los resultados: este enfoque es más útil de reproducir que la elección de una biblioteca. CSS Modules puede reducir un coste identificado; no sustituye al diagnóstico.

Fuentes y ámbito documental Mostrar las referencias

Referencias indicadas en el brief editorial. Las cifras se atribuyen a la experiencia de GitHub; los documentos no han sido objeto de una verificación independiente para esta redacción.

  • GitHub Engineering — Improving site performance by shipping more CSS, publicación indicada el 25 de septiembre de 2026.
  • Primer React — Styling with CSS Architecture Decision Record, para las decisiones de arquitectura y los benchmarks internos.
  • Documentación oficial de CSS Modules, para el funcionamiento de las clases locales.
  • Primer React v37 y v38 — documentación de la transición a CSS Modules.
  • styled-components — documentación del renderizado del servidor y de los React Server Components.

Desarrollo web

Prepare la próxima actualización de su aplicación web.

Migración de PHP, actualización de un CMS o cambio de framework: identifique los problemas de compatibilidad y pruebe los recorridos esenciales antes de publicar.

  • Compatibilidad de las dependencias comprobada
  • Recorridos esenciales probados en preproducción
  • Despliegue con un plan de reversión