Le domande a cui era stata data risposta in precedenza qui dicevano che questo era il modo più veloce:
//nl is a NodeList
var arr = Array.prototype.slice.call(nl);
Nel benchmarking sul mio browser ho scoperto che è più di 3 volte più lento di questo:
var arr = [];
for(var i = 0, n; n = nl[i]; ++i) arr.push(n);
Entrambi producono lo stesso output, ma trovo difficile credere che la mia seconda versione sia il modo più veloce possibile, soprattutto perché qui la gente ha detto diversamente.
È una stranezza nel mio browser (Chromium 6)? O c'è un modo più veloce?
EDIT: Per chiunque si preoccupi, ho optato per quanto segue (che sembra essere il più veloce in ogni browser che ho testato):
//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: ho trovato un modo ancora più veloce
// nl is the nodelist
var arr = [];
for(var i = nl.length; i--; arr.unshift(nl[i]));
var i = nl.length, arr = new Array(i); for(; i--; arr[i] = nl[i]);
arr[arr.length] = nl[i];
potrebbe essere più veloce rispetto aarr.push(nl[i]);
quando evita una chiamata di funzione.