2011-05-23 3 views
1

Jeter cette question ici parce que cela m'a fait réfléchir ce soir.avec-tag vs sans-tag sélection dans jQuery

J'ai entendu avant que c'est beaucoup mieux pour inclure la balise HTML dans un sélecteur jQuery chaque fois que vous pouvez, car il démarre les performances de sélection par, bien, dire jQuery quelles balises HTML pour rechercher il n » t recherche tout dans le document. (À savoir aller $('div.someclass') au lieu de $('.someclass') quand vous pourriez.)

Ma question est, comment est-ce vrai maintenant, avec la version actuelle de jQuery (actuellement 1.6.1)? Je ne suis même pas sûr que cette notion soit pré-Sizzle (même si Sizzle aide jQuery à mieux fonctionner à cet égard).

Bien sûr, les bonnes pratiques de codage dicterait que j'inclure la balise HTML chaque fois que je pouvais juste pour garder les choses claires, mais il y a une zone grise pour moi quand je préfère aller

$('.someclass') 

juste parce que je ne veux pas aller

$('div.someclass, a.someclass, p.someclass, img:nth-child(3n+2).someclass') 

seulement complètement théoriques dudes. Je sais que je peux juste aller $('div,a,p,img:nth-child(3n+2)').filter('.someclass').

EDIT

Sur une note un peu lié, je suis allé de l'avant et fait perf tests avec étiquette vs sans étiquette sélection (merci Raynos), et apparemment, la sélection sans étiquette était significativement plus bénéfique que de -tag sélection sur FF et Chrome. Avec-tag était encore plus rapide sur IE8, mais par les regards de la marge étroite, il est complètement éclipsé par l'alternative sur les autres navigateurs. Hmm.

+2

'.filter (». UneClasse) ' – BoltClock

+0

@BoltClock ~ oh ouais, bonne prise. +1: D –

+1

Je suppose * que cela dépend du navigateur. Si l'on a un moteur de sélection natif ou getElementsByClassName, le fait de ne pas spécifier le nom du tag sera probablement plus rapide car il faut moins vérifier chaque élément. Si, OTOH, jQuery n'a pas de code natif sur lequel s'appuyer, il serait plus rapide de restreindre la recherche avec getElementByTagName en premier. – Quentin

Répondre

1

$('.someclass') devrait être beaucoup plus rapide que $("div.someclass, p.someclass")

Il est utile que d'être spécifique si elle n'élargit pas la requête.

Benchmark

+0

merci pour le lien de référence + site ainsi; Je sais que je vais fréquenter ce site dans les prochains jours. :RÉ –