329 votes

Ce qui est plus rapide children() ou find() dans jQuery ?

Pour sélectionner un enfant dans jQuery, on peut utiliser children() mais aussi find().

Par exemple :

``

donne le même résultat que :

``

Maintenant, quelle option est plus rapide ou préféré et pourquoi ?

425voto

tvanfosson Points 268301

children() ne regarde que les enfants immédiats du nœud, tout en find() traverse l'ensemble de DOM-dessous du nœud, de sorte children() devrait être plus rapide équivalente implémentations. Toutefois, find() utilise natif du navigateur méthodes, children() utilise JavaScript interprété dans le navigateur. Dans mes expériences, il n'y a pas beaucoup de différence de performances dans les cas typiques.

Pour utiliser dépend de si vous voulez seulement de considérer les descendants immédiats ou tous les nœuds dessous de celui-ci dans les DOM, c'est à dire, de choisir la méthode appropriée basée sur les résultats que vous désirez, pas de la vitesse de la méthode. Si la performance est vraiment une question, essayez de trouver la meilleure solution et l'utiliser (ou de voir certains des acteurs de référence dans les autres réponses ici).

181voto

zarjay Points 1953

Cette jsPerf test suggère que find() est plus rapide. J'ai créé une plus approfondie de test, et il semble toujours comme si find() surpasse les enfants().

Mise à jour: Comme par tvanfosson commentaire, j'ai créé un autre cas de test avec 16 niveaux d'imbrication. find() est plus lent lors de la recherche de tous les possibles divs, mais find() encore surpasse les enfants() lors de la sélection du premier niveau de divs.

les enfants() commence à se surpasser find() quand il y a plus de 100 niveaux d'imbrication et autour de 4000+ vrd pour find() pour le traverser. C'est rudimentaire de cas de test, mais je pense toujours que find() est plus rapide que chez les enfants() dans la plupart des cas.

Je traversai le code jQuery dans Chrome Developer Tools et a remarqué que les enfants() à l'interne effectue des appels à la fratrie(), filter(), et passe par un peu plus de regexes que find ().

find() et les enfants (de) répondre à des besoins différents, mais dans le cas où les trouver() et les enfants (les) sortie le même résultat, je vous conseille d'utiliser find().

91voto

mactive Points 461

Voici un lien a l’essai de prefermance vous pouvez l’exécuter. Actualité du find() est plus rapide que (enfants), environ 2 X plus vite.Chrome on OSX10.7.6

25voto

John Feminella Points 116878

Ceux qui ne donnent pas nécessairement le même résultat : vous permet d’obtenir n’importe quel nœud *descendant* , alors que vous obtiendrez uniquement les enfants immédiats qui correspondent.

Ainsi, `` sera plus lent car il doit rechercher pour chaque nœud descendant qui pourrait être un match et les enfants non seulement immédiats.

-1voto

Arun Pratap Singh Points 177

Comme est plus rapide que

Mais si vous êtes ne pas encore parcourir en tout.

Vous pouvez utiliser.

Il est équivalent à

équivalent à

plus rapide sera puis puis``

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