Как работи масивът на javascript при натискане на нови елементи?

Тествах този код в Chrome / Firefox:

console.time('simple push');
var arr0 = [];
for(var i =0; i < 1000000; i++){
    arr0.push(i);
}
console.timeEnd('simple push');
console.time('set length and push');
var arr1 = [];
arr1.length=1000000;
for(var j =0; j < 1000000; j++){
    arr1[j]=j;
}
console.timeEnd('set length and push');
console.time('new Array push');
var arr2 = new Array(1000000);
for(var k =0; k < 1000000; k++){
    arr2[k]=k;
}
console.timeEnd('new Array push');

Chrome 13 Резултат

просто натискане: 59ms
задайте дължина и натиснете: 192ms
нов Array push: 187ms

Firefox 4 Result

просто натискане: 76ms
задайте дължина и натиснете: 44ms
new Array push: 40ms

Моето съмнение

Така че операцията с нов Array определено е най-бавната, но искам да знам защо?
Защо зададената дължина се държи различно в Chrome и Firefox, изглежда, че предварително разпределената памет не работи добре в Chrome?

Актуализация

Актуализирах резултатите от Chrome и FF.

7
задан Rustam 29 July 2012 в 16:49
поделиться