簡體   English   中英

JavaScript內部功能和性能

[英]JavaScript inner-functions and Performance

對定義clousre與全局范圍函數的運行時和內存有什么影響?

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

我知道選項A具有功能范圍(Closure)的優勢......

讓我說我有1000個功能,這會如何影響運行時間和內存?

如果使用內部函數,則運行時必須為將來的調用分配和保存它們的上下文,並且每次調用包含它們的函數時都會發生這種情況。 因此,可以很方便地設想聲明一個內部函數就像構造一個對象一樣,該對象的成員只是圍繞該函數的封閉范圍內的變量。

如果不經常這樣做,這可能不是那么糟糕,因為內存量與在堆上分配對象大致相同; (在某些情況下,您可以采取一些巧妙的優化來避免這種情況,例如,如果您只在調用堆棧中傳遞函數,則可以在本地堆棧空間中分配,或者執行一些內聯​​等)。 但是,在大多數情況下它仍然是一個分配,所以你應該避免在繁忙的循環中使用太多它們或創建許多內部函數。

所以為了回答你的問題,選項B一般會更快。 但是不要讓這讓你氣餒!

我最后的看法是方便的內部功能完全超過了小的運行時間開銷,我想說在方便的地方使用它們。 如果它成為性能瓶頸,請返回並優化它們。

性能

一個非常小的基准案例:

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

外面的#2功能: http//jsfiddle.net/sAVZn/

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

#1 - 700毫秒

#2 - 80ms

記憶

它們差不多......

如果可能的話,我會推薦選項A,因為它可以使您的代碼更清晰。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM