2011-03-03 93 views
4

我已經看到了,聲稱要加快函數調用的開銷如Javascript代碼:減少javascript函數調用開銷

function foo() { 
    // do something 
} 

function myFunc() { 
    var fastFoo = foo; // this caches function foo locally for faster lookups 
    for (var i = 0; i < 1000; i++) { 
     fastFoo(); 
    } 
} 

我看不出這樣可以加快JavaScript函數調用的開銷,因爲它似乎對我來說,它只是一個內存查找,無論是在當前堆棧的頂部(對於fastFoo)還是在堆棧的其他地方(我不確定全局上下文存儲在哪裏......任何人?)。

這是古代瀏覽器的遺蹟,是一個完整的神話還是真正的改進增強器?

+0

正如你所說,這在現代瀏覽器中可能微不足道。 – 2011-03-03 15:04:17

+0

JavaScript使用詞法範圍。 2009年,Nicholas Zakas發表了一篇關於JavaScript性能的Google Tech Talk(https://www.youtube.com/watch?v=mHtdZgou0qU#t=4m20s)(鏈接到關於Scope鏈的章節)。查看[更多JSPERF](https://www.mediawiki.org/wiki/JSPERF)。 – Krinkle 2012-03-19 09:35:21

回答

2

這一切都取決於範圍。訪問本地作用域總是比訪問父作用域更快。如果函數在父範圍中定義,那麼如果您創建本地參考,則經常會看到加速。

如果這個加速是很重要的,取決於很多事情,只有在你的情況下測試會顯示它是否值得這樣做。

速度的差異取決於範圍的差異。

x.y.z範圍調用a.b.c.d.e.f.g.h();比從a.b.c(不是最漂亮或最正確的例子範圍調用a.b();慢,但它應該'serve它的目的:)

2

這將導致無窮性能獲得。
不要這樣做。