As perguntas anteriormente respondidas aqui disseram que esse era o caminho mais rápido:
//nl is a NodeList
var arr = Array.prototype.slice.call(nl);
Nos testes comparativos no meu navegador, descobri que é mais de três vezes mais lento que isso:
var arr = [];
for(var i = 0, n; n = nl[i]; ++i) arr.push(n);
Ambos produzem a mesma saída, mas acho difícil acreditar que minha segunda versão seja a maneira mais rápida possível, principalmente porque as pessoas disseram o contrário aqui.
Isso é uma peculiaridade no meu navegador (Chromium 6)? Ou existe uma maneira mais rápida?
EDIT: Para quem se importa, decidi o seguinte (que parece ser o mais rápido em todos os navegadores que testei):
//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: Encontrei uma maneira ainda mais 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];
pode ser mais rápido do quearr.push(nl[i]);
porque evita uma chamada de função.