Chargement en cours
github css modules react performance
Développement webPar SDX Development

Partager cet article

LinkedInFacebookXWhatsAppE-mail

Dans son retour d’expérience publié le 25 septembre 2026, GitHub indique avoir achevé une migration menée sur plusieurs années : depuis juin 2026, son architecture de styles concernée sur github.com repose intégralement sur CSS Modules, sans styled-components, styled-system ni prop sx.

À retenir

Des gains réels, mais contextualisés

GitHub rapporte une réduction de 55 % du temps de rendu serveur sur une mesure après la migration de Primer, puis des gains d’environ 1 % à 22 % sur différentes pages. Ces résultats décrivent son environnement : ils ne prédisent pas les bénéfices d’une migration sur une autre application React.

Pourquoi CSS-in-JS est devenu coûteux pour GitHub

CSS-in-JS répondait à des besoins concrets dans Primer, le design system de GitHub. Les styles restaient proches des composants, les design tokens étaient intégrés à l’API et TypeScript facilitait l’autocomplétion. Avec sx, les développeurs pouvaient personnaliser un composant à partir d’un objet JavaScript.

Selon GitHub, les difficultés sont devenues importantes autour de 2023, avec l’augmentation du nombre de composants sur certaines pages. Dans une solution CSS-in-JS exécutée au runtime, le traitement des styles accompagne l’exécution de l’application. Répété sur des centaines ou des milliers de composants, ce travail peut devenir significatif.

01

Interpréter les styles

Les objets et leurs variations doivent être traités pour déterminer les règles applicables au composant.

02

Gérer les classes

La bibliothèque génère ou retrouve les classes correspondant aux styles, selon son fonctionnement et ses mécanismes de cache.

03

Préparer le rendu serveur

La collecte des styles peut ajouter du travail au rendu des composants avant l’envoi de la page.

04

Initialiser côté navigateur

Le traitement et l’injection des styles peuvent participer au coût d’initialisation de l’interface.

Ces mécanismes varient selon les bibliothèques. Il faut donc distinguer le CSS-in-JS exécuté au runtime des solutions qui extraient les styles au build : elles ne présentent pas nécessairement les mêmes coûts.

CSS Modules : conserver les composants, déplacer le travail

CSS Modules permet d’associer une feuille de style à un composant tout en rendant les noms de classes locaux au module par défaut. Le composant importe une correspondance de noms de classes ; l’outillage transforme ces noms pour éviter les collisions.

GitHub conserve ainsi une organisation orientée composants, mais produit des feuilles de style sans dépendre du même traitement JavaScript des styles au moment du rendu.

CSS-in-JS au runtime

Une API dynamique proche du composant

La logique de styles peut exploiter directement les propriétés du composant. Ce confort doit être mis en balance avec le coût de traitement mesuré dans l’application.

CSS Modules

Du CSS local préparé au build

Les fichiers CSS restent liés explicitement aux composants. Les variantes peuvent s’appuyer sur des classes, des attributs et des variables CSS.

Les styles dynamiques ne disparaissent pas

Passer à CSS Modules n’interdit ni les thèmes ni les changements d’apparence. Les variables CSS permettent notamment de faire varier des couleurs ou des espacements sans reconstruire toutes les règles en JavaScript. En revanche, les comportements auparavant fournis par la bibliothèque doivent être identifiés et repris explicitement.

Quels gains GitHub a-t-il mesurés ?

Les mesures portent sur plusieurs étapes et plusieurs périmètres. Elles ne doivent ni être additionnées ni être interprétées comme une accélération globale équivalente de github.com.

Périmètre rapporté Indicateur Résultat
Après la migration des composants Primer concernés Temps de rendu serveur d’une page −55 %
Après la migration de Primer Temps d’initialisation des composants −25 %
Migration élargie à différentes pages de github.com Temps de rendu serveur selon la page Environ −1 % à −22 %
Benchmark interne Primer avec 1 000 composants Injection CSS au runtime comparée à des fichiers CSS statiques 242 ms contre 96 ms

La dispersion des résultats est instructive. Le nombre de composants, les variations de styles et le poids des autres traitements changent d’une page à l’autre. Une réduction importante sur un cas chargé ne garantit pas le même résultat sur une interface plus simple.

Point d’attention

Un rendu serveur plus rapide n’est pas une promesse SEO

Réduire le travail serveur ou JavaScript peut améliorer l’expérience utilisateur. Cela ne garantit toutefois aucun gain automatique sur le LCP, l’INP ou le référencement : images, appels API, scripts tiers, cache et logique métier peuvent rester les principaux freins.

Une migration progressive plutôt qu’une réécriture

GitHub a commencé par Primer. Pour chaque composant, une implémentation en CSS Modules était placée derrière un feature flag, comparée à l’ancienne par des tests de régression visuelle, puis déployée progressivement. Cette première phase s’est achevée en décembre 2024 pour les composants concernés.

Maintenir la compatibilité avec l’existant

Le code de github.com contenait encore environ 7 760 props sx en avril 2025. GitHub a utilisé une couche intermédiaire, @primer/styled-react, afin que ces usages continuent de fonctionner pendant la transition. Une équipe de huit ingénieurs a ensuite converti 6 419 props sx en six mois.

Cette coexistence temporaire évitait d’imposer une bascule unique à toute la base de code. Elle permettait de progresser package par package, avec un périmètre de validation plus maîtrisable.

Automatiser les transformations connues

GitHub a développé une extension Visual Studio Code et un codemod pour faciliter les conversions. Lors de la reprise de la dernière phase en avril 2026, il restait 895 occurrences de sx. GitHub rapporte leur suppression en trois semaines avec deux ingénieurs et plusieurs agents GitHub Copilot.

Ce résultat concerne une transformation déjà définie et outillée. L’automatisation accélère les modifications répétitives ; elle ne dispense pas de vérifier les styles dynamiques, le responsive, l’accessibilité et les régressions.

Découpler le système de thèmes

Le dernier obstacle ne se limitait pas aux props sx. Une partie du theming dépendait encore de styled-components. GitHub a dû découpler cette logique et s’appuyer davantage sur les variables CSS de Primer, notamment pour ses différents thèmes et variantes à contraste élevé.

C’est un point important pour les applications SaaS : déplacer les déclarations CSS ne suffit pas si la bibliothèque assure aussi les thèmes, les tokens ou des comportements hérités.

Faut-il abandonner styled-components sur une application React ?

Non, pas sur la seule base du retour de GitHub. Une architecture productive et suffisamment performante n’a pas besoin d’être remplacée parce qu’une autre entreprise rencontre des contraintes différentes.

Conserver l’existant

Le styling n’est pas un frein mesuré

Si les performances répondent aux besoins, si la dynamique des styles est utile et si la migration apporte peu de bénéfices, conserver CSS-in-JS peut être le choix le plus raisonnable.

Tester une alternative

Le runtime représente un coût significatif

Des pages très chargées, un SSR coûteux ou une majorité de styles statiques peuvent justifier un prototype en CSS Modules pour comparer des implémentations équivalentes.

Pour un nouveau projet, partir des contraintes

CSS Modules constitue une option pertinente pour utiliser du CSS standard avec un scope local et limiter le runtime consacré aux styles. Ce n’est pas l’unique voie : CSS structuré, classes utilitaires ou génération au build peuvent également répondre au besoin. Le design system, les compétences de l’équipe et les exigences de personnalisation restent déterminants.

Comment évaluer une migration sans se tromper de priorité

Avant de modifier l’architecture, établissez une référence sur des pages représentatives, dont une interface particulièrement chargée. Le protocole doit conserver les mêmes composants, contenus, comportements et conditions de test.

Six étapes avant une migration généralisée

  1. Profiler l’existant. Isoler le coût du styling des appels API, de la base de données et de la logique métier.
  2. Choisir un pilote. Tester une famille de composants suffisamment utilisée pour produire des mesures utiles.
  3. Comparer à fonctionnalités égales. Conserver les variantes, les thèmes et les états interactifs.
  4. Sécuriser le déploiement. Utiliser des feature flags, des tests visuels et une possibilité de retour arrière.
  5. Automatiser avec revue. Confier les transformations répétitives aux outils et examiner les cas complexes.
  6. Décider sur les résultats. Étendre la migration seulement si les gains justifient son coût et ses risques.

Mesurer le serveur et le navigateur

Pour une application SSR, suivez le temps de rendu, le CPU par requête et la mémoire. Complétez avec le TTFB, les volumes JavaScript et CSS transférés, l’hydratation et les mesures LCP et INP auprès des utilisateurs réels. Ces indicateurs décrivent des dimensions différentes : une amélioration sur l’un ne garantit pas celle des autres.

Intégrer le coût de maintenance

Une décision d’architecture ne se résume pas à un benchmark. Le temps de migration, la compatibilité du design system, la couverture des tests et la facilité de contribution doivent entrer dans l’évaluation.

Le principal enseignement : garder une architecture évolutive

Le retour de GitHub montre qu’une solution confortable au début d’un projet peut devenir moins adaptée à une autre échelle. Il montre aussi qu’un changement profond peut être mené progressivement, sans réécrire toute l’application.

Mesurer, tester sur un périmètre réduit, préserver la compatibilité et valider les résultats : cette démarche est plus utile à reproduire que le choix d’une bibliothèque. CSS Modules peut réduire un coût identifié ; il ne remplace pas le diagnostic.

Sources et périmètre documentaire Afficher les références

Références indiquées dans le brief éditorial. Les chiffres sont attribués au retour d’expérience de GitHub ; les documents n’ont pas fait l’objet d’une vérification indépendante pour cette rédaction.

  • GitHub Engineering — Improving site performance by shipping more CSS, publication indiquée au 25 septembre 2026.
  • Primer React — Styling with CSS Architecture Decision Record, pour les choix d’architecture et benchmarks internes.
  • Documentation officielle CSS Modules, pour le fonctionnement des classes locales.
  • Primer React v37 et v38 — documentation de la transition vers CSS Modules.
  • styled-components — documentation du rendu serveur et des React Server Components.

DÉVELOPPEMENT WEB

Préparez les évolutions de votre application web.

Migration PHP, mise à jour de CMS ou évolution de framework : identifiez les points de compatibilité et validez les parcours essentiels avant la mise en ligne.

  • Compatibilité des dépendances vérifiée
  • Parcours essentiels testés en préproduction
  • Mise en ligne avec possibilité de retour arrière