Existe-t-il une méthode préférée pour déterminer si une classe est attribuée à un élément, du point de vue des performances?
$('#foo').hasClass('bar');
ou
$('#foo').is('.bar');
Existe-t-il une méthode préférée pour déterminer si une classe est attribuée à un élément, du point de vue des performances?
$('#foo').hasClass('bar');
ou
$('#foo').is('.bar');
Réponses:
J'ai commis un test après un commentaire et quatre votes positifs pour très commenter. Il s'avère que ce que j'avais dit est la bonne réponse. Voici le résultat:
http://jsperf.com/hasclass-vs-is-so
Le is
est polyvalent, vous pouvez par exemple faire is('.class')
, is(':checked')
etc qui des moyens is
a plus à voir où est hasClass
est limitée , ce qui ne vérifie que pour une classe ou non être ensemble.
Par conséquent, cela hasClass
devrait être plus rapide si la performance à n'importe quel niveau est votre priorité.
hasClass
c'est beaucoup plus rapide.
Étant donné qu'il is
est plus générique que hasClass
et utilise filter
pour traiter l'expression fournie, il semble probable que ce hasClass
soit plus rapide.
J'ai exécuté le code suivant à partir de la console Firebug:
function usingIs() {
for (var i=0; i<10000;i++) {
$('div#example-0').is('.test');
}
}
function usingHas(){
for (var i=0; i<10000;i++) {
$('div#example-0').hasClass('test');
}
}
usingIs();
usingHas();
J'ai eu:
Ce n'est pas une énorme différence, mais cela peut être pertinent si vous faites beaucoup de tests.
EDIT quand je dis «pas une énorme différence, mon point est que vous devez faire 10000 cycles pour voir 0,8 s de différence. Je serais surpris de voir une application Web telle que le passage de is
à hasClass
permettrait une amélioration significative des performances globales. Cependant, j'accorde que c'est une amélioration de 35% de la vitesse.
Les deux devraient être assez proches en termes de performances mais $('#foo').hasClass('bar');
me semblent plus lisibles et sémantiquement corrects.