5 javascript performance closures
对定义clousre与全局范围函数的运行时和内存有什么影响?
function a(){
//functions (option A)
}
//functions(option B)
Run Code Online (Sandbox Code Playgroud)
我知道选项A具有功能范围(闭包)的优势......
让我说我有1000个功能,这会如何影响运行时间和内存?
表现
一个非常小的基准案例:
#1 内部函数:http://jsfiddle.net/bMHgc/
#2 外部函数:http://jsfiddle.net/sAVZn/
在我的机器上:(5000 * 1000次)
#1 - 700 毫秒
#2 - 80 毫秒
记忆
他们几乎是一样的...
如果可能的话,我会推荐选项 A,因为它可以使您的代码更简洁。
如果您使用内部函数,则运行时必须为任何未来调用分配和保存它们的上下文,并且每次包含它们的函数被调用时都会发生这种情况。因此,可以很方便地想象,声明一个内部函数就像构造一个对象,其成员只是该函数周围封闭范围内的变量。
如果您不经常这样做,这可能不是那么糟糕,因为内存量与在堆上分配对象大致相同;(并且在某些情况下,您可以进行一些巧妙的优化来避免这种情况,例如,如果您只将函数向下传递到调用堆栈,您可以在本地堆栈空间中分配,或者进行一些内联等)。但是,在大多数情况下它仍然是一个分配,因此您应该避免在繁忙循环中使用太多它们或创建许多内部函数。
因此,要回答您的问题,一般来说选项 B 会更快。但是不要让这让你气馁!
我最后的看法是,方便的内部函数完全超过了小的运行时间开销,我会说在任何方便的地方使用它们。如果结果证明是性能瓶颈,请返回并优化它们。
| 归档时间: |
|
| 查看次数: |
3127 次 |
| 最近记录: |