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
- 153.31毫秒
- 145.85毫秒
- 146.4ms
- 119.29毫秒
- 120毫秒
- 120.44毫秒
- 835.384ms
- 854.082ms
- 899.334ms
- 1202.805ms
- 1251.734ms
- 1270.959ms
为什么会发生这种情况?请注意,代码示例会产生不同的结果。在第二种情况下,
a.b.c.d
从未改变。更现实地说,你应该测试var x=a.b.c代码>和x.d+=10
。不幸的是,e.d+=10
比e+=10
更快,但比a.b.c.d+=10
更差,没有优化微基准。