Dernièrement, je me suis demandé s'il y a une différence de performance entre répéter le sélecteur juste encore et encore à nouveau ou simplement en utilisant un VaR et de stocker le sélecteur en ce sens et de le désigner simplement.
var Object = $('#Element'); Object.dothis(); Object.dothat(); $('a', Object).dothat();
6 Réponses :
Je préfère la deuxième façon. Il sera
Il y a certainement une différence de performance, car le sizzle n'a pas à être exécuté à chaque fois, cependant, il existe également une différence de fonctionnalité. Si le DOM arrive à changer entre les 1er et 3e appels, l'objet JQuery mis en cache contiendra toujours l'ancien ensemble d'éléments. Cela peut souvent se produire si vous mettez en cache un ensemble, puis utilisez-le dans un rappel. P>
Une idée sur la façon de se déplacer? C'est-à-dire que de stocker le sélecteur dans une variable mais qu'il faut tenir compte d'un DOM en mutation? Tout ce que je peux penser à stocker une fonction qui renvoie le sélecteur de la variable (mais cela ne semble pas fonctionner pour moi)
Invalidation d'une sélection peut être très difficile et personne ne le fait à cause d'anciens navigateurs et conditions de race. La meilleure façon de le faire, si vous écrivez tout le code qui modifie votre DOM, ajoutez les éléments aux collections vous-même chaque fois que vous modifiez. Donc, si vous insérez quelque chose, vous savez que vous avez une collection pour, faites un $ mycollection.add (newnode); code>
Il y a un autre moyen rapide. Il est aussi rapide que votre deuxième code.
$('#Element') .dothis() .dothat() .find('a') .dothat();
La deuxième manière a une prestation de performance. Cela peut être ou peut ne pas être génial mais c'est mieux. Dans la première version, vous faites une traversée DOM Traversal 4 fois, dans la seconde, vous ne faites que 2. P>
Un assez bon article sur l'accélération de JQuery ici: http://net.tutsplus.com/tatudials/javascript-ajax/10-ways-à-Ingrease-your-jquery-performance/ P>
Déplacement de la méthode de Ghommey plus rapide et stocke l'objet pour une utilisation ultérieure. p> p>
stocker les résultats de votre sélection JQuery à une variable est plus rapide. En effet, JQuery Dosers n'a pas besoin de rechercher les résultats à chaque fois que vous essayez d'y accéder. P>
J'ai rassemblé des métriques de performance: http://jsperf.com/jquery-Selectors -vs-stocké-variable p>
sur chrome 26.0.1410.63 sur Mac OS X 10.8.2:
Sélection: 40,276 ops / sec
Stockage de la variable: 594 031,358 ops / sec p>
La deuxième façon est probablement plus rapide car vous ne scannez pas l'index DOM à chaque fois pour les objets requis. De plus, comme vous le dites, il s'agit simplement de meilleures pratiques de codage tant que les nouveaux noms de variable reflètent correctement ce qu'ils contiennent.
De plus, rappelez-vous qu'il s'agissait d'un objet JQuery, vous pouvez utiliser $ objet c'est la même chose cependant, mais vous connaissez toujours vos objets JS et vos objets liés à JQUERY.