93 votes

jQuery .hasClass () vs .is ()

y a-t-il une méthode préférée de déterminer si un élément est assigné une classe, d’un point de vue performances ?

ou

162voto

Sarfraz Points 168484

Mise à jour:

J'ai commis un test à la suite d'un commentaire et quatre upvotes très commentaire. Il s'avère que ce que j'avais dit, c'est la bonne réponse. Voici le résultat:

enter image description here

http://jsperf.com/hasclass-vs-is-so


L' is est multi-usage, vous pouvez par exemple faire is('.class'), is(':checked'),, etc, qui signifie is a plus à voir où est - hasClass est limitée qui vérifie uniquement pour une classe ou pas.

Par conséquent, hasClass devrait être plus rapide si la performance à n'importe quel niveau est votre priorité.

13voto

Dancrumb Points 11918

Depuis is est plus générique que l' hasClass et utilisations filter pour traiter la condition de l'expression, il semble probable que l' hasClass est plus rapide.

J'ai couru le code suivant à partir de la console de 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:

  • usingIs: 3191.663 ms
  • usingHas: 2362.523 ms

Pas une énorme différence, mais peut être utile si vous êtes en train de faire beaucoup de tests.

EDIT quand je dis " pas une énorme différence, mon point est que vous devez faire 10000 cycles afin de voir 0,8 s de différence. Je serais surpris de voir une application web telles que le passage d' is de hasClass serait une amélioration significative de plus de toutes les performances. Cependant, je vous l'accorde que c'est une amélioration de 35% de la vitesse.

9voto

Darin Dimitrov Points 528142

Les deux devraient être assez proches en termes de performances mais `` semble plus lisible et sémantiquement correct pour moi.

7voto

Gaurav Points 14339

est beaucoup plus rapide que vous pouvez le tester d’ici. Changer le scénario de test selon vous.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X