Apelando para o elemento inexistente da matriz, reduz muito o desempenho
Fiz uma observação - apelando para o elemento inexistente da matriz, reduz muito o desempenho. Está visivelmente em loops longos. Por que isso acontece?
Exemplo:
var filledArray = []; //This array will filled
var emptyArray = []; //This array leave empty
//fill one array
for(var i = 0; i < 1e6; i++) {
filledArray[i] = true;
}
//Just iterate the array and call its elements
//In filled array all elements exists, in empty array non-exists
function callItems(arr) {
for(var i = 0; i < 1e6; i++) {
arr[i];
}
}
//measurement function
function bench(f, d) {
var start = new Date;
f(d);
alert(new Date - start, ' ms');
}
////Result for filled array
//Firefox 24.0: 20 ms
//Chrome 30.0: 3 ms
bench(callItems, filledArray);
////Result for empty array
//Firefox 24.0: 340 ms
//Chrome 30.0: 70 ms
bench(callItems, emptyArray);
Editar:
Se você estiver executando código no Firefox, observe que isso resulta na influência do Firefox no Firebug - ativado ou desativado. Eu entendi, depois de vários testes.
Se habilitado - resulta mesmo, como escrevi acima. Mas se o Firebug não for ativado após o lançamento do Firefox, o tempo igual a 2 ms (mais rápido que o Opera e o Chrome) e a diferença entre o array vazio / preenchido desaparecerá.
Também afeta os resultados swap chamadas função bench () - primeiro com vazio, em seguida, com matriz preenchida (apenas no Firefox com o Firebug habilitado, sem o Firebug e em outros navegadores resultados inalterados).
Por que tal afeta o Firebug? - pergunta adicional.