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

React et performance web
GitHub rapporte des gains de rendu serveur et d’initialisation après le remplacement de son architecture CSS-in-JS. Ce retour d’expérience éclaire les limites du styling au runtime, sans faire de CSS Modules une recommandation universelle.
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.
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.
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.
Les objets et leurs variations doivent être traités pour déterminer les règles applicables au composant.
La bibliothèque génère ou retrouve les classes correspondant aux styles, selon son fonctionnement et ses mécanismes de cache.
La collecte des styles peut ajouter du travail au rendu des composants avant l’envoi de la page.
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 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.
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.
Les fichiers CSS restent liés explicitement aux composants. Les variantes peuvent s’appuyer sur des classes, des attributs et des variables CSS.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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 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.
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.
DÉVELOPPEMENT 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.
Saisissez au moins 2 caractères pour lancer la recherche.