Will jQuery recherche-t-il l'ID avant de filtrer d'autres paramètres dans le sélecteur?

Cette question est liée à la performance.

Si j'utilise un sélecteur comme suit

$('#myID a') // Does this find #myID and filter by a? 

Ou devrais-je écrire la déclaration comme celle-ci?

 $('#myID').find('a') 

Je ne sais pas si jQuery est assez intelligent pour exécuter cette déclaration en utilisant l'ID d'abord ou si elle fonctionne exactement comme CSS et lit de droite à gauche. Ce n'est pas une grosse affaire à l'aide de balises, mais lorsque vous exécutez quelque chose comme

 $('#myID .myClass') 

Cela fait une énorme différence de performance.

À partir d'un article NetTuts: http://net.tutsplus.com/tutorials/javascript-ajax/quick-tip-think-right-to-left-with-jquery/

À titre d'exemple, si Sizzle rencontre un sélecteur comme $ ('# box p'), il est vrai qu'il fonctionne de droite à gauche, mais il existe également une optimisation rapide de regex qui déterminera d'abord si la première section du sélecteur est Un identifiant. Si tel est le cas, cela l'utilisera comme contexte, lors de la recherche des balises de paragraphe.

Commentaire pertinent de SizzleJS :

 // Take a shortcut and set the context if the root selector is an ID // (but not if it'll be faster if the inner selector is an ID) 

Lorsqu'un ID est dans le sélecteur. JQuery va d'abord exécuter document.getElementById puis commencez à filtrer pour les éléments enfants.

C'est essentiellement pourquoi il n'est jamais une excellente idée d'utiliser uniquement les attributs ou les sélecteurs de classe $('.someclass') or $('[name=myname]') sans être plus précis. Parce qu'il provoque le passage du code sur le DOM et regarde chaque élément pour trouver cette classe.

En ajoutant simplement un nom de variable au même sélecteur $('div.someclass') or $('div.[name=myname]') vous améliorez l'efficacité car il fonctionnera d'abord. document.getElementsByTagName réduisant le nombre d'éléments à rechercher.