2011-03-03 74 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

这将导致无穷性能获得。
不要这样做。