324 votes

Moyen le plus rapide pour convertir tableau JavaScript NodeList ?

Déjà répondu à des questions posées ici a dit que c'était le moyen le plus rapide:

//nl is a NodeList
var arr = Array.prototype.slice.call(nl);

Dans l'analyse comparative sur mon navigateur, j'ai trouvé que c'est plus de 3 fois plus lent que celui-ci:

var arr = [];
for(var i = 0, n; n = nl[i]; ++i) arr.push(n);

Ils ont tous les deux donnent le même résultat, mais j'ai du mal à croire que mon deuxième version est la méthode la plus rapide, surtout depuis que les gens ont dit le contraire ici.

Est-ce un caprice de mon navigateur (Chrome 6)? Ou est-il un moyen plus rapide?

EDIT: Pour quelqu'un qui se soucie, je me suis installé sur la suite (ce qui semble être le plus rapide dans tous les navigateurs que j'ai testé):

//nl is a NodeList
var l = []; // Will hold the array of Node's
for(var i = 0, ll = nl.length; i != ll; l.push(nl[i++]));

EDIT2: j'ai trouvé un moyen plus rapide

// nl is the nodelist
var arr = [];
for(var i = nl.length; i--; arr.unshift(nl[i]));

234voto

galambalazs Points 24393

La seconde tend à être plus rapide dans certains navigateurs, mais le point principal est que vous avez à l'utiliser parce que le premier est tout simplement pas cross-browser. Même si Le Times, Ils Sont a-Changin'

@kangax (IE 9 preview)

Tableau.le prototype.la tranche peut convertir les l'hôte de certains objets (par exemple, NodeList) pour les tableaux - quelque chose que la majorité des les navigateurs modernes ont été en mesure de le faire pendant un certain temps.

19voto

Thai Points 4698

Certaines optimisations :

  • enregistrer la longueur de la NodeList dans une variable
  • Définissez explicitement la nouvelle longueur du tableau avant le réglage.
  • accéder à l’index, plutôt que de pousser ou d’unshifting.

Code (jsPerf) :

15voto

CMS Points 315406

Les résultats dépendent complètement de l'navigateur, afin de donner un objectif verdict, nous devons faire des tests de performance, voici quelques résultats, vous pouvez les exécuter ici:

Chrome 6:

Firefox 3.6:

Firefox 4.0b2:

Safari 5:

IE9 Platform Preview 3:

15voto

Felipe Alcacibar Points 4822

Le plus rapide et Croix navigateur est

Comme je l’ai comparé à

http://jsbin.com/oqeda/91/Edit

  • Merci @CMS pour l’idée !

Chromium (Similar to Google Chrome)FirefoxOpera

5voto

anonymous Points 41

plus rapide et plus courte :

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