Vous pouvez toujours valider les performances sur ce site ainsi que sur plusieurs navigateurs: jsperf.com ... Voici quelques cas de test à parcourir: jsperf.com/browse
iwasrobbed
Réponses:
164
Mettre à jour:
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:
Le isest polyvalent, vous pouvez par exemple faire is('.class'), is(':checked')etc qui des moyens isa plus à voir où est hasClassest limitée , ce qui ne vérifie que pour une classe ou non être ensemble.
Par conséquent, cela hasClassdevrait être plus rapide si la performance à n'importe quel niveau est votre priorité.
@SgtPooki, je demandais simplement une preuve; si c'était vrai, je voulais savoir pourquoi. Je suis curieux comme ça :). Vous pouvez facilement avoir plus de fonctionnalités et les rendre plus rapides; cela dépend toujours de la mise en œuvre. Votre 99% est une généralisation globale et pas nécessairement le véritable état du développement logiciel. Votre question "jQuery sera-t-il un jour aussi rapide que du JavaScript? Une réponse autre que non est fausse." n'est pas une bonne question; jQuery a en fait de nombreuses optimisations qui fourniront un accès plus rapide aux éléments DOM une fois les données mises en cache; cela dépend vraiment de votre utilisation spécifique.
Kris
1
@SgtPooki aussi vite que possible, jetez un œil au moteur de sélection de grésillement; comme je continue de le mentionner, cela dépend de la mise en œuvre et dans les navigateurs plus anciens qui ne prennent pas en charge les requêtes de manière native, il sera probablement plus rapide grâce à l'implémentation de jQuery car il n'y a pas de version native (win par défaut). De plus, si vous continuez à rappeler les mêmes éléments DOM, en fonction du navigateur et de la version, cela peut prendre du temps supplémentaire car jQuery peut mettre en cache cet élément pour une récupération plus rapide. Les fonctions JavaScript natives sont généralement plus rapides; mais cela dépend de la prise en charge et de la mise en œuvre du navigateur.
Kris
13
Étant donné qu'il isest plus générique que hasClasset utilise filterpour traiter l'expression fournie, il semble probable que ce hasClasssoit plus rapide.
J'ai exécuté le code suivant à partir de la console Firebug:
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à hasClasspermettrait une amélioration significative des performances globales. Cependant, j'accorde que c'est une amélioration de 35% de la vitesse.
Réponses:
Mettre à jour:
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 faireis('.class')
,is(':checked')
etc qui des moyensis
a plus à voir où esthasClass
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é.la source
hasClass
c'est beaucoup plus rapide.Étant donné qu'il
is
est plus générique quehasClass
et utilisefilter
pour traiter l'expression fournie, il semble probable que cehasClass
soit plus rapide.J'ai exécuté le code suivant à partir de la console Firebug:
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.la source
Les deux devraient être assez proches en termes de performances mais
$('#foo').hasClass('bar');
me semblent plus lisibles et sémantiquement corrects.la source
.hasClass
est beaucoup plus rapide que.is
vous ne pouvez le tester à partir d' ici . Changez le scénario de test selon vous.la source