我正在玩一些 javascript 性能优化,发现了一些有趣的东西。这是代码:
function gObject() {
this.obj = [];
this.LIMIT = 100000;
this.doLoopLocal = function () {
var o = [];
for (var i=0;i<this.LIMIT;i+=1) {
o.push(i);
}
return o;
};
this.doLoopObject = function () {
this.obj = [];
for (var i=0;i<this.LIMIT;i+=1) {
this.obj.push(i);
}
};
};
var g = new gObject();
console.time('Using Local array');
g.doLoopLocal();
console.timeEnd('Using Local array');
console.time('Using Object array');
g.doLoopObject();
console.timeEnd('Using Object array');
当我运行它时,日志告诉我使用本地数组比使用对象命名空间中定义的数组慢。差异是显着的 - 8 到 10 倍!(FF 18.0.1)
Using Local array: 16ms
Using Object array: 2ms
截图:
我一直假设在函数中使用本地定义的对象更快,但这个实验表明我错了。为什么会发生这种情况?
更新:我在本地 Firefox 控制台中尝试了该脚本,并且数字是我最初所期望的:使用本地数组优于使用对象数组。所以真正的原因是 Firebug 出于某种原因扭曲了数字并显示了不正确的结果。要记住的事情。