访问局部变量而不是对象的属性是否更快?

时间:2011-03-19 22:00:15

标签: performance

直接语言不可知的问题。我一直这样做:

myVar = myObj.myAttribute

当我需要经常访问myAttribute时。

我想知道这是否只是我所获得的迷信,或者它是否通常更快?

编辑:我还想知道这是否

myVar = myObj.myAttribute/100
for (i=0; i<100; i++) {
    print myVar*i;
}

比将(myObj.myAttribute / 100)放入循环更有效。现代编译器和解释器是否会发现等式中的那部分不会发生变化?

3 个答案:

答案 0 :(得分:1)

我想它可能取决于语言和/或编译器;但是,一般来说,你的代码越少,它就越快。

但差异不应该那么重要......而最重要的是人们能够轻松理解你的代码。


例如,在Javascript中,它表示使用局部变量更快,而不是多次重新计算对象访问。
即这个:

var a = obj.a.b.c;
a.a = 10;
a.b = 20;
a.c = 30:

比那更快:

obj.a.b.c.a = 10;
obj.a.b.c.b = 20;
obj.a.b.c.c = 30:

答案 1 :(得分:1)

通常,根据语言,也许。

然而,除非您正在运行(例如)紧密循环,否则您不太可能注意到差异。

通常我会说节省下来不值得程序员额外的认知负担。

但是如果你有一些你知道有慢速问题的代码,那么这种优化绝对值得考虑。

答案 2 :(得分:1)

在这种特殊情况下,你所做的更有效率,因为它是一个师而不是100。

只有在我可以优化稍后完成的操作时才会对属性赋值,例如在你的情况下或期望多次调用同一属性并且对象查找可能很昂贵。通常使用局部变量应该是更多的cpu wize方式,因为执行复杂的属性查找可能成本很高,同时可以更好地控制该属性值并在循环之前进行可能的预验证。也就是说,只有在函数调用可能发生一次或两次查找时,它可能效率低下,从而增加了开销并使代码更难以跟进。