Vaut-il la peine de se préoccuper de la performance du rendu CSS? Ou devrions-nous simplement ne pas nous soucier de l'efficacité du tout avec CSS et nous concentrer plutôt sur l'écriture d'un CSS élégant ou maintenable?
Cette question est destinée à être une ressource utile pour les développeurs front-end sur quelles parties du CSS peuvent avoir un impact significatif sur la performance des appareils, et quels appareils / navigateurs ou moteurs pourraient être affectés. Il ne s'agit pas d'une question sur comment écrire un CSS élégant ou maintenable, il s'agit uniquement de performance (bien que ce qui est écrit ici puisse informer des articles plus généraux sur les bonnes pratiques).
Preuves existantes
Google et Mozilla ont rédigé des directives sur l'écriture efficace de CSS et l'ensemble de règles de CSSLint inclut:
Évitez les sélecteurs qui ressemblent à des expressions régulières .. n'utilisez pas les opérateurs d'égalité complexes pour éviter les pénalités de performance
mais aucun d'entre eux ne fournissent de preuves (que j'ai pu trouver) de l'impact qu'ils peuvent avoir.
Un article de css-tricks.com sur le CSS efficace soutient (après avoir exposé une multitude de bonnes pratiques d'efficacité) que nous ne devrions pas .. sacrifier la sémantique ou la maintenabilité pour un CSS efficace
de nos jours.
Un article du blog perfection kills suggérait que border-radius
et box-shadow
rendaient des ordres de grandeur plus lentement que des règles de CSS plus simples. C'était très significatif dans le moteur d'Opera, mais insignifiant dans Webkit. De plus, un test de performance CSS de smashing magazine a trouvé que le temps de rendu des règles d'affichage CSS3 était insignifiant et significativement plus rapide que de rendre l'effet équivalent en utilisant des images.
Know your mobile a testé divers navigateurs mobiles et a constaté qu'ils rendaient tous le CSS3 de manière équivalent insignifiante rapidement (en 12ms) mais il semble qu'ils ont réalisé les tests sur un PC, donc nous ne pouvons rien déduire sur la performance des appareils portables avec CSS3 en général.
Il y a beaucoup d'articles sur internet sur comment écrire un CSS efficace. Cependant, je n'ai pas encore trouvé de preuves complètes que CSS mal conçu ait effectivement un impact significatif sur le temps de rendu ou la réactivité d'un site.
Contexte
J'ai offert une prime pour cette question pour essayer d'utiliser la puissance communautaire de SO pour créer une ressource utile bien recherchée.
0 votes
Une chose que je peux vous dire avec certitude: utilisez les IDs là où les IDs doivent être utilisés, et les classes là où les classes doivent être utilisées. La différence de performance est négligeable, la sémantique ne l'est pas. Les IDs pour les éléments qui - par définition - apparaissent une seule fois; les classes pour ceux qui peuvent se répéter sur la page. Pensez simplement au cas extrême lorsque vous utilisez une classe pour une position CSS
fixée
.0 votes
@MichaGórny Les ID devraient être utilisés dans le balisage quand ils sont appropriés, mais beaucoup de gens croient (moi inclus) que les ID ne devraient jamais être utilisés dans les sélecteurs CSS. Lisez cet article pour une (espérons-le impartiale) élaboration: screwlewse.com/2010/07/dont-use-id-selectors-in-css
0 votes
Eh bien, cet article est d'accord avec moi sur quand les identifiants peuvent et doivent être utilisés. Et mon exemple extrême de
position: fixed
est un exemple quand le CSS simplement ne devrait pas être réutilisé. Pas que je préconise de faire quelque chose comme ça.0 votes
Rappelez-vous que la plupart des navigateurs essaient déjà d'optimiser les sélecteurs du mieux qu'ils peuvent. Prenons l'exemple bien connu de correspondance de droite à gauche sur une base par élément. La plupart des sélecteurs ne sont lents que s'il y a beaucoup d'éléments sur votre page. Si vous avez une page très simple avec seulement trois enfants de
body
et rien d'autre, aucun sélecteur que vous utilisez ne devrait causer un plantage ou même un gel du navigateur.0 votes
Aussi, cette question ne concerne-t-elle principalement que les sélecteurs, ou tous les aspects du CSS ? La performance du CSS ne réside pas seulement dans les sélecteurs, vous savez. Les navigateurs doivent se soucier de choses comme la mise en page, le positionnement, le calcul et le dessin de dégradés, la composition alpha, et toutes sortes d'autres choses. Et voilà le rendu. La correspondance des sélecteurs n'est pas le rendu; il s'agit simplement de déterminer quels éléments afficher de quelle manière.
0 votes
@RobinWinslow De manière amusante, la page que vous avez mentionnée avec l'article sur les sélecteurs ID style éléments par ID de nombreuses fois :)
1 votes
@BoltClock Je suis intéressé par tous les éléments de style qui peuvent avoir un impact significatif sur les performances de rendu. Bien que les sélecteurs soient plus faciles à définir pour la mise en pratique, donc ces conseils auront probablement le plus d'impact.
0 votes
Je n'ai plus la source de cette information, mais un site que je consultais il y a environ un mois alors que je faisais des recherches sur les appareils mobiles prétendait que certaines propriétés CSS sont plus coûteuses à rendre (c'est-à-dire qu'elles consomment plus de batterie). Ils ont mentionné trois propriétés spécifiques comme étant les pires contrevenants, mais la seule qui m'a marqué comme étant susceptible d'être utilisée avec cette génération de navigateurs est box-shadow.
0 votes
Ceci est simplement un outil de référence pour vos sites Web en général, que j'utilise habituellement pour optimiser mes sites. Pagespeed (par Google) : chrome.google.com/webstore/detail/…, Le navigateur lit chaque saut que vous faites dans votre CSS, donc plus le fichier est compact, mieux c'est. Il existe de nombreux outils qui peuvent le faire. Bien que je ne sache pas quels balises fonctionnent mieux.
0 votes
J'aime la première phrase de l'article n°2 du post de Simon West ci-dessous : "Tu ne l'as probablement pas remarqué..."Il a raison : je ne l'ai pas fait. Je voulais qu'il y ait une solution miracle ici - il n'y en a pas. Je préfère écrire moins de code, un code plus sémantique, et laisser la chasse au milliseconde à ceux qui ont beaucoup de temps libre. Je ne crois pas que ce soit les sélecteurs, ou les IDs vs Classes - la seule chose que j'ai jamais trouvée qui impacte les performances est la taille du fichier, et les sauts de ligne/comptage dans les fichiers CSS (même ceux qui sont gonflés de sélecteurs de classe, qui gonflent également le balisage). <-- nous ramenant à la sémantique.
0 votes
Possible duplicate de Choix de sélecteurs efficaces basés sur la complexité computationnelle