经常访问对象属性的属性时缓存是否正常?

时间:2016-07-24 10:51:23

标签: javascript performance memory properties

我们说我有以下代码:

var k;
for(k in obj){
    if(obj.p1.p1.p1){
        obj.p1.p1.p2 = obj.p1.p1.p3;
    }
    // ...
    // more stuff with obj.p1.p1
    // ...
}

如果我将obj.p1.p1存储在这样的变量中会更好吗?

var k, p;
for(k in obj){
    p = obj.p1.p1;
    if(p.p1){
        p.p2 = p.p3;
    }
    // ...
}

这样我可以减少对财产的访问,但是我使用了更多内存(我还有一个变量)。

哪种方式更好?它有所作为吗?

1 个答案:

答案 0 :(得分:1)

理论上,从严格的性能角度来看, 1 将值保存到变量并使用变量会更快。

在实践中,假设JavaScript引擎知道其他线程无法修改该值(例如,在浏览器和NodeJS上都是如此),如果它变得对性能至关重要,那么一个体面的现代JavaScript引擎将尽可能为您完成。分析程度可能因引擎而异,但现在它们几乎都是非常快

从风格或维护的角度来看它是“更好”是一个意见问题,因此对于SO来说是偏离主题的。

1 然而:即使速度更快,实际上也不太重要,因此从性能角度考虑它可能是过早的微优化。写下你认为最清晰的代码,并担心如果/当你遇到特定的性能问题时哪个更快。