J'ai un site Web:
<html> <head> <link rel="stylesheet" type="text/css" href="overrides.css"> </head> <body id="contact" class="contact"> <h1>Contact us!</h1> </body> </html>
body#contact h1 { color: red; } #contact h1 { color: red; } body.contact h1 { color: red; } .contact h1 { color: red; }
Dois-je utiliser la ligne 1, 2, 3 ou 4 dans le fichier css? Ils font tous la même chose, mais le dernier pourrait potentiellement en sélectionner plus que je ne le souhaite. L'un a-t-il un avantage sur l'autre lors de l'optimisation de la vitesse?
3 Réponses :
Plus le sélecteur est court, mieux c'est. Si possible, assurez-vous que le sélecteur de clé est une classe ou un identifiant pour le garder rapide et spécifique.
Pour plus d'informations, veuillez lire l'article ci-dessous. Fortement recommandé.
https://www.sitepoint.com/ optimisation-des-sélecteurs-id-css-et-autres-mythes /
Le sélecteur le plus court est * et c'est le pire absolu: D
Avant de lire ma réponse, je voudrais vous dire que l'optimisation de la vitesse via le code CSS est un grand espace de problèmes. Vous pouvez optimiser la vitesse en utilisant un minificateur et en minimisant la taille de votre CSS. Cela faciliterait le chargement du fichier côté serveur et son envoi vers Internet (à tous les navigateurs qui le demandent) et côté navigateur, cela augmenterait les performances en diminuant le fichier qu'il doit télécharger. En dehors de cet aspect, la performance du code CSS est strictement un problème au niveau du navigateur et vous ne devriez travailler dessus que si vous observez des problèmes de performance côté client.
De plus, avant de faire toute optimisation de votre CSS, veuillez d'abord tester en supprimant règles pour h1
et voyez si cela fait une différence dans les performances.
Dans cette réponse, je supposerai que vous avez des problèmes de performances côté client lorsque le navigateur exécute votre CSS. Le sélecteur id
de #
indique au navigateur de rechercher un id
donné et, puisque dans le cas d'un code HTML valide, le id
est unique, la plupart des navigateurs arrêteront la recherche à sa première occurrence. Cependant, vous définissez l ' id
pour body
, ce qui n'augmente pas trop les performances, puisque body
est l'enfant direct de la racine balise html
. Si vous avez une section où se trouvent toutes vos balises h1
, alors ce serait bien si vous lui donniez un id
et l’utilisiez dans votre sélecteur. Les sélecteurs de class
ne s'arrêteront pas à la première correspondance, car une classe
n'est pas supposée être unique. Supposons que vous ayez un div
dans lequel se trouvent toutes vos balises h1
:
#h1-container h1 { /*Your rules*/ }
Si vous lui donnez un id :
<div id="h1-container"> <!-- There are some h1 tags in here --> </div>
et utilisez-le dans votre sélecteur:
<div> <!-- There are some h1 tags in here --> </div>
alors ça devrait être joli rapide. Si vous rencontrez toujours des problèmes de performances, vous devrez nous donner plus d'informations sur votre problème, éventuellement avec un exemple reproductible, comme un JSFiddle.
Je ne pense pas que nous puissions dire que la spécificité améliore la vitesse d'analyse. Ce que id améliore légèrement, c'est la vitesse de rendu. Il y a d'autres facteurs qui affectent votre vitesse de rendu, tels que la taille du fichier CSS et le fait d'avoir à de nombreuses règles redéfinir la même classe encore et encore, par exemple
Quelques recommandations pour améliorer vos rendus:
-
par exemple, qui sont spécifiques d'un module, l'utilisation de la classe parent du module pour les définir évitera au navigateur d'explorer tout le HTML et vous avez gagné Il n'est pas nécessaire de remplacer les règles par la suite lorsque vous utilisez la même balise pour un élément de conception différent. background-position-y: calc (-8 * $ module)
. Cette méthode vous fera économiser beaucoup de règles css pour définir la position ainsi que des éléments HTML car vous n'aurez pas à regrouper les images bg dans les deux axes (x, y) avec
et height
en ligne. Et si ces images sont au format .jpg, utilisez une compression d'environ 60 et sauvegardées au format jpg progressif. Je pense qu'avec ces règles de base, vous n'aurez aucun problème de rendu dans la plupart des cas.
<section class="content"> <h1>My title</h1> <img class="thumnnail" src="https://fakeimg.pl/250x100/" title="my image"/> <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.</p> <p>Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.</p> <p>Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.</p> <ul> <li>Excepteur sint occaecat cupidatat</li> <li>non proident sunt in culpa</li> <li>qui officia deserunt mollit anim id est laborum.</li> </ul> </section> <aside> <ul class="tabs"> <li class="tab">Tab 1</li> <li class="tab">Tab 2</li> <li class="tab">Tab 3</li> </ul> </aside>
h1 { margin: 16px 8px; font-size: 24px; color: #999966; } p { margin: 8px 8px 16px; } .thumnnail { float: left; margin: 0 8px; } .content, aside { display: table-cell; } .content { width: 75%; } .content ul { margin: 8px; padding: 8px 16px ; } .content li { margin:8px 0; } .tabs { margin: 0; padding: 0; background: #ddd; } .tab { list-style: none; padding: 8px; } .tab + .tab { border-top: solid 2px #fff; }
Peut-être que cet article peut vous aider? Il comprend un extrait JS pour tester les vitesses des sélecteurs. Cela varie cependant selon le navigateur que vous utilisez. benfrain.com/...
Le sélecteur global
*
est connu pour être plus lent, ainsi que le sélecteur d'attributs[attr = val]
, pour le reste, concentrez-vous sur la lisibilité, la maintenance et la fonctionnalité au lieu de vous soucier de la vitesse. Et le moindre élément à envoyer au navigateur, mieux c'est, en termes de performances.meiert.com/fr/blog/performance-of-css-selectors- 2