Je ne pouvais pas décider si je devrais aller avec $. chacun (matrice, fonction () {...}) em> ou array.foreach (...) em > ou quelque chose d'autre. Donc, j'ai appelé la puissante Google qui m'a donné Ce lien, qui est fantastique s'il est fiable . p>
Selon cela, il y a une énorme différence de vitesse entre différentes approches. En général, généralement, un pour em> -Loop semble être préféré. P>
Je ne suis pas un gourou sur JavaScript, je voudrais donc obtenir des commentaires de certains membres JS-Savvy. P>
3 Réponses :
Lorsque vous comparez des boucles JQuery aux boucles JavaScript, vous devez vous rappeler que JQuery est implémentée à l'aide de JavaScript.
Toutes les fonctions de jQuery finissent par faire du code JavaScript standard. p>
comme tel cela signifie que dans la plupart des cas JavaScript sera plus efficace. p>
Ma boucle préférée pour la vitesse est la suivante: p> qui est sauf itération à travers un objet JavaScript auquel cas: P > $(document.getElementById('elementId'));
Comparaison $ (sélecteur) code> à $. Chaque code> n'est pas vraiment pertinent compte tenu de ce $. Chaque code> est un glorifié pour code> pour code> pour code> boucle pendant que le sélecteur commence une analyse puis recherchez.
@pickypg: Je crois que Slitcanvas facilite la jqurey est presque toujours plus lente (dans n'importe quel scénario) que de JavaScript natif simplement parce qu'il effectue des checksums et ajoute des frais généraux à n'importe quelle opération.
Oui, Brad est correct. Bien que j'adore JQuery pour sa facilité d'utilisation et son support croisé. J'ai trouvé faire des choses que la manière façonnée peut être beaucoup plus rapide et plus efficace.
Je serais d'accord pour le cas général, mais je ne suis pas d'accord dans le cas de $. Chaque code>. Il y a des frais généraux, à coup sûr, car il vérifie la vérification du fait que l'objet transmis " isarray aiment code>", mais il exécute un brut pour code> boucle de là. Pour la vitesse brute, il n'y a pas de question, mais dans le cas général quand ce n'est pas vraiment le goulot d'étranglement, je voudrais remettre en question la présomption que JQuery est lente et donc indigne, sauf lorsque la compatibilité est nécessaire. Prendre un pic à la mise en œuvre de JQuery, ils feront la meilleure boucle ci-dessus comme suggéré (le peu de frais généraux), que je suggérerais de payer lui-même.
Pendant que je suis d'accord pour une page HTML standard, aucune différence notable ne sera jamais vue entre les deux. En regardant le lien JSperf inclus dans la question ci-dessus montre la réalité effrayante de JQuery vs JavaScript. Et comme pour la compatibilité du navigateur sur les boucles. Dans le cas des boucles de base, j'espère que JQuery n'est pas nécessaire pour la compatibilité.
Probablement l'indigène pour la boucle (bien, partout sauf Opera, où Reseach est plus rapide, mais c'est une autre histoire).
Cependant, préfère toujours le code lisible sur un code plus rapide lorsque vous le pouvez. Tous ces types de boucles peuvent gérer des centaines de milliers d'itérations chaque seconde sur une machine moyenne. P> Le code lisible est beaucoup plus important ici - si un permet de dire que vous avez une méthode appelée DOSOMEUSHCURRENT: P> $. Chaque code> Plus de 100 éléments Semble plus lisible à vous - par tous les moyens, c'est que (je préfère généralement généralement array.foraach code>, principalement parce qu'il est natif et cohérent avec natif .map code> .filter .Reduce code> et ainsi de suite). Si vous effectuez beaucoup de travail dans la boucle, la différence devient encore plus petite. P> var new = names.map(function(elem){
return elem.firstName+" "+elem.lastName;
});
Je suis d'accord avec vous sur le problème de la lisibilité. Je suivez généralement la convention supposée par l'équipe ou implicite par le code précédemment déployé. Quel trait moi ici était la différence vaste b> entre les méthodes. Je me rends également compte que même la méthode la plus lente sur mon Foxy était ce que Waaay était plus rapide que le meilleur sur IE. Néanmoins, j'ai eu un peu chocké. Merci pour la réponse.
@Konradviltersten qui perf vous lié à est assez connu :) (surtout dans des versions plus étendues, y compris un pendant code> alternative, comptant, etc.). Ces questions de performance sont plus courantes dans le contexte de Nodejs ( après i> trouver les goulots d'étranglement bien sûr). À la clientèle JavaScript - La performance d'A pour la boucle n'a pas d'importance que beaucoup (parfois dans les jeux). Essayez simplement de coller une action intensive dedans et les frais généraux de la boucle réelle disparaîtront rapidement. La convention de l'équipe est définitivement la voie à suivre :) Je ne dis pas d'optimiser, mais d'optimiser quand vous devez.
Mots sages, benjamin. Merci!
En ce qui concerne JavaScript, je suis souvent déchiré entre la vitesse brute et en sachant que la fonction existe. P>
Selon Mozilla, Array .Poresach code> n'est pas pris en charge dans IE jusqu'à ce que IE9. P>
En tant que tel, je l'éviterais à peu près en faveur de la normale pour les boucles code> car JSperf montre de fonctionner beaucoup plus rapidement dans chrome (au moins) ou de bon vieux $. Chaque Code> de JQuery parce que vous pouvez compter sur le fait que c'est là et qu'il commencera probablement à utiliser array.foreach code> en interne à un moment donné. P>
Il est parfaitement légitime aux caractéristiques de la langue des shim déjà implémentés. Je suis souvent des choses shim comme foreach code>, plan code> et filtre code> lors de la gestion du code qui doit supporter des navigateurs plus anciens.
Je suis complètement d'accord avec ça. Je suis aussi shim array.indexof code> et string.trim code> en faveur de $. Garnir code> en raison principalement de la lisibilité.
Vous pouvez toujours exécuter des tests sur jsperf.com
@ j08691 Quel est ce lien dans la question?
@ROBW - Oh allon ce lien n'était pas là il y a une minute était-ce?
@ j08691 supposant beaucoup une question d'âne paresseux? : D (j'oublie de faire la bonne recherche à l'occasion, mais cette fois - Rock Solid, Haha.)
@Kay Comment saviez-vous qu'il y avait une version plus récente? En outre, comment l'avez-vous arrivé? Je suis juste allé à l'original mais je n'ai pas trouvé de "la plus récente" -Link ...
Le Downvoter: soin de commenter afin que je puisse corriger la question?
@Konradviltersten J'ai édité la version que vous avez fournie en ajoutant "/ édition" à l'URL et a diminué la taille de la matrice. Pour trouver d'autres versions, faites défiler dans le violon. Je ne peux pas dire quelle version est le meilleur ™. :)
@Kay merci. C'était un site très informatif que j'ai trouvé. Je ne peux tout simplement pas croire que je me suis dit voté et suggère de près ... Je me suis mal expressé mal ?!
Après avoir examiné cette question, je ne vois pas de problème réel. Sauf si vous avez des problèmes de performance réels (aucun n'est répertorié), cela me semble une tragédie triste de micro-optimisation. .
@Erikphilips Ma question devrait être considérée comme une merveille académique. Je n'ai aucun problème de performance pratique (encore au moins). Driven par une curiosité pure pour la langue, j'ai parcouru pour différentes approches d'itérator et trébucha sur les de différentes marques de bancs B>. Ensuite, j'ai été intrigué et demandé une discussion approfondie sur le sujet de ceux qui connaissent JS mieux que moi. Donc, c'est plutôt une tragédie triste de ne pas avoir une femme / des enfants B>, à la recherche de quelque chose à faire avec mon temps. Je préfère apprendre à connaître JS mieux que de s'asseoir et regardez à la télévision. :)
J'ai mentionné cela parce que la deuxième phrase de quels types de questions dois-je éviter de demander? est Vous ne devriez que demander praticité , questions répondantes basées sur des problèmes réels que vous rencontrez. I>.
@Erikphilips Point valide. Il devrait y avoir un moyen de marquer une question comme une merveille de type ouverte, de quoi, spéculative, spéculative et valorisée. Surtout en ce qui concerne le style de codage et les approches générales et les stratégies qui ne sont pas spécifiquement liées à un problème technique. Ou suis-je un loup solitaire quand il s'agit d'améliorer pour l'amélioration seule? :)
@Konradviltersten Checkout programmeurs.stackexchange.com .