Las preguntas respondidas anteriormente aquí dijeron que esta era la forma más rápida:
//nl is a NodeList
var arr = Array.prototype.slice.call(nl);
Al realizar una evaluación comparativa en mi navegador, descubrí que es más de 3 veces más lento que esto:
var arr = [];
for(var i = 0, n; n = nl[i]; ++i) arr.push(n);
Ambos producen el mismo resultado, pero me resulta difícil creer que mi segunda versión sea la forma más rápida posible, especialmente porque la gente ha dicho lo contrario aquí.
¿Es esto una peculiaridad en mi navegador (Chromium 6)? ¿O hay una manera más rápida?
EDITAR: Para cualquier persona que se preocupe, me decidí por lo siguiente (que parece ser el más rápido en todos los navegadores que probé):
//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: encontré una forma aún más rápida
// 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];
puede ser más rápido quearr.push(nl[i]);
ya que evita una llamada de función.