根据this article,v8引擎将为每种不同类型的对象生成隐藏类。不幸的是,用户需要非常小心地设计数据结构,否则可能会出现严重的性能问题。
请参阅以下代码,此代码运行速度非常慢,因为v8为每个'obj'创建了隐藏类,因为它们有不同的键:
// run in nodejs v0.12
for(var i=0; i<100000; i++){
var obj = {};
obj[Math.random()] = true;
}
//too slow 35.8s!
但是,当我在此代码中添加技巧时,性能提高了300倍
for(var i=0; i<100000; i++){
var obj = {k : 1};
delete obj.k; // trick v8 not to use hidden class
obj[Math.random()] = true;
}
// 0.19s!
所以问题是,有没有更好的方法(官方方式)来避免这种性能问题?我需要使用Nodej来处理大量数据,这种性能问题几乎是不可避免的。