Я запускаю этот тест в разных версиях node:
function test() {
var i;
var bigArray = {};
var start = new Date().getTime();
for (i=0; i<100000; i+=1) {
bigArray[i] = {};
var j= Math.floor(Math.random() * 10000000);
bigArray[i]["a" + j] = i.toString(32);
if (i % 1000 === 0) console.log(i);
}
var end = new Date().getTime();
var time = end - start;
console.log('Execution time: ' + time);
}
test();
Как вы можете видеть, он просто создает объект с 100000 полями, где каждое поле является всего лишь объектом с одним полем. Ключ этого внутреннего объекта вынужден быть буквенно-цифровым (если клавиша является числовой, она работает нормально).
Когда я запускаю этот тест в разных реализациях/версиях javascript, я получаю следующие результаты:
v0.8.28 -> 2716 ms
v0.10.40 -> 73570 ms
v0.12.7 -> 92427 ms
iojs v2.4.0 -> 510 ms
chrome -> 1473 ms
Я также попытался запустить этот тест в асинхронном цикле (каждый шаг цикла в другом тике), но результаты аналогичны результатам, показанным выше.
Я не могу понять, почему этот тест настолько дорогой в новых версиях node. Почему это так медленно? Есть ли специальный флаг v8, который может улучшить этот тест?