JavaScript内部功能和性能

时间:2011-06-25 07:35:51

标签: javascript closures performance

对定义clousre与全局范围函数的运行时和内存有什么影响?

function a(){
      //functions (option A)
}
//functions(option B)

我理解选项A具有功能范围(闭包)......

的优点

假设我有1000个函数,它会如何影响运行时间和内存?

2 个答案:

答案 0 :(得分:4)

如果使用内部函数,则运行时必须为将来的调用分配和保存它们的上下文,并且每次调用包含它们的函数时都会发生这种情况。因此,很容易想象声明一个内部函数就像构造一个对象一样,它的成员只是围绕该函数的封闭范围内的变量。

如果不经常这样做,这可能不是那么糟糕,因为内存量与在堆上分配对象大致相同; (在某些情况下,您可以采取一些巧妙的优化来避免这种情况,例如,如果您只在调用堆栈中传递函数,则可以在本地堆栈空间中分配,或者执行一些内联​​等)。但是,在大多数情况下它仍然是一个分配,所以你应该避免在繁忙的循环中使用太多它们或创建许多内部函数。

所以回答你的问题,选项B一般会更快。但是不要让这让你气馁!

我最后的看法是,内部功能的便利性完全超过了小的运行时间开销,我想说在方便的地方使用它们。如果结果是性能瓶颈,请返回并优化它们。

答案 1 :(得分:4)

<强>性能

一个非常小的基准案例:

#1内部功能:http://jsfiddle.net/bMHgc/

外部的#p>#2功能:http://jsfiddle.net/sAVZn/

在我的机器上:(5000 * 1000次)

#1 - 700ms

#2 - 80ms

<强>内存

他们差不多......

如果可能的话,我会推荐选项A,因为它可以使您的代码更清晰。