缓存对象的属性

时间:2016-02-27 06:31:22

标签: javascript performance v8

我有一个看起来像这样的对象:

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.d
console.time('PROPS');
var e = a.b.c.d;
for (var i = 0; i < 100000000; i++) { e += 10; }
console.timeEnd('PROPS');

在NodeJS中,我得到了以下结果:

没有缓存:

  • 312.526ms
  • 311.120ms
  • 311.955ms

使用缓存:

  • 298.109ms
  • 295.304ms
  • 291.429ms

我期待这样的结果...接下来,我启动了Firefox并在那里测试了我的功能,但我最小化迭代次数到100000而不是100000000,因为我的浏览器崩溃了

没有缓存:

  • 153.31ms
  • 145.85ms
  • 146.4ms

使用缓存:

  • 119.29ms
  • 120毫秒
  • 120.44ms

正如您所看到的,第二个功能比第一个功能更快......但是当我开始在Google Chrome中进行测试时,我对结果感到困惑。

没有缓存:

  • 835.384ms
  • 854.082ms
  • 899.334ms

使用缓存:

  • 1202.805ms
  • 1251.734ms
  • 1270.959ms

为什么呢?我相信,如果我在变量I中缓存对象的属性,结果会更快,但不是......

在多次尝试测试我的功能后,我去了互联网。我发现了一些关于改善V8性能的文章,但我没有找到我需要的东西。

为什么会这样?

0 个答案:

没有答案