频繁访问对象的属性时缓存是否良好'的属性

Is caching good when frequently accessing the property of an object's property?

本文关键字:属性 是否 访问 对象 缓存      更新时间:2023-09-26

假设我有以下代码:

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将值保存到变量并使用该变量会更快。

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

从风格或维护的角度来看,它是否"更好"是一个意见问题,因此与so无关。


1 然而:即使它更快,也不太可能真正重要,因此从性能角度担心它可能是过早的微观优化。编写您认为最清晰的代码,并担心如果/当您有特定的性能问题需要解决时,哪一个更快。