我有一个看起来像这样的对象:
var a;
a = {
b: {
c: {
d: 20
}
}
};
我有两个测试功能。 第一个函数不会在变量中缓存对象属性。
console.time('PROPS');
for (var i = 0; i < 100000000; i++) { a.b.c.d += 10; }
console.timeEnd('PROPS');
变量 e
中的第二个功能缓存 a.b.c.dconsole.time('PROPS');
var e = a.b.c.d;
for (var i = 0; i < 100000000; i++) { e += 10; }
console.timeEnd('PROPS');
在NodeJS中,我得到了以下结果:
没有缓存:
使用缓存:
我期待这样的结果...接下来,我启动了Firefox并在那里测试了我的功能,但我最小化迭代次数到100000而不是100000000,因为我的浏览器崩溃了:
没有缓存:
使用缓存:
正如您所看到的,第二个功能比第一个功能更快......但是当我开始在Google Chrome中进行测试时,我对结果感到困惑。
没有缓存:
使用缓存:
为什么呢?我相信,如果我在变量I中缓存对象的属性,结果会更快,但不是......
在多次尝试测试我的功能后,我去了互联网。我发现了一些关于改善V8性能的文章,但我没有找到我需要的东西。
为什么会这样?