2011-03-19 79 views
0

直面語言不可知的問題。我一直這樣做:訪問局部變量比對象的屬性更快嗎?

myVar = myObj.myAttribute 

當我需要訪問myAttribute很多。

我想知道這是否僅僅是我已經獲得的迷信,或者如果它通常更快?

編輯:我也想知道,如果這

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

是不是把(myObj.myAttribute/100)在循環效率更高。現代編譯器和解釋器是否會檢測到該部分的方程不會改變?

回答

1

在你做了什麼,這種特殊情況下更有效,因爲它是一個分工與100

我屬性分配給變量只有我可以優化後完成的,操作就像在你的情況或需要多個電話到相同的屬性和對象查找可能是昂貴的。一般來說,使用局部變量應該是更多的cpu wize方法,因爲執行復雜的屬性查找可能代價高昂,並且可以更好地控制該屬性值,並在循環之前進行可能的預驗證。也就是說,只有在函數調用可能發生一次或兩次時,查找效率可能會很低,因此會增加開銷並使代碼更難跟進。

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

作爲一項規則,根據不同的語言,也許。

但是,您不太可能會注意到這種差異,除非您正在運行(例如)緊密循環。

通常我會說節省不值得程序員額外的認知負擔。

但是,如果你有一些你知道有緩慢問題的代碼,這種優化是絕對值得考慮的。