Javascript 缓存对象';s属性

Javascript 缓存对象';s属性,javascript,performance,v8,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'); console.time('PROPS');

我有一个像这样的对象:

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');
console.time('PROPS');
对于(var i=0;i<100000000;i++){a.b.c.d+=10;}
console.timeEnd(“道具”);
变量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');
console.time('PROPS');
var e=a.b.c.d;
对于(var i=0;i<100000000;i++){e+=10;}
console.timeEnd(“道具”);
在NodeJS中,我得到了以下结果:

没有缓存:

  • 312.526ms
  • 311.120毫秒
  • 311.955ms
使用缓存:

  • 298.109ms
  • 295.304ms
  • 291.429ms
我期待这样的结果。。。接下来,我启动了Firefox并在那里测试了我的功能,但我将迭代次数从100000000次降至100000次,因为我的浏览器崩溃了

没有缓存:

  • 153.31毫秒
  • 145.85毫秒
  • 146.4ms
使用缓存:

  • 119.29毫秒
  • 120毫秒
  • 120.44毫秒
如您所见,第二个函数比第一个函数快。。。但当我开始在谷歌Chrome上测试时,我对结果感到困惑

没有缓存:

  • 835.384ms
  • 854.082ms
  • 899.334ms
使用缓存:

  • 1202.805ms
  • 1251.734ms
  • 1270.959ms
为什么??我相信如果我将对象的属性缓存在变量中,我会得到更快的结果,但不会

在几次尝试测试我的功能后,我上网了。我找到了一些关于提高V8性能的文章,但我没有找到我需要的


为什么会发生这种情况?

请注意,代码示例会产生不同的结果。在第二种情况下,
a.b.c.d
从未改变。更现实地说,你应该测试
var x=a.b.c
x.d+=10
。不幸的是,
e.d+=10
e+=10
更快,但比
a.b.c.d+=10
更差,没有优化微基准。