国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 語言 > JavaScript > 正文

JavaScript中匿名、命名函數的性能測試

2024-05-06 16:08:29
字體:
來源:轉載
供稿:網友
這篇文章主要介紹了JavaScript中匿名、命名函數的性能測試,簡單來講匿名即沒有名字的函數,它和命名函數相比性能如何呢,本文即是對它們性能的測試,需要的朋友可以參考下
 
 

我們經常通過匿名函數(Anonymous function)來寫回調。

簡單來講匿名即沒有名字的函數,一般都立即執行。但是它與命名函數(有名字的函數)的性能如何呢?

我們可以比較一下,我們隨便找一臺可以執行Shell命令的計算機來使用大量函數調用看一看二者執行消耗時間:

anonymous.js

復制代碼代碼如下:

var count = 100000000
  , sum   = 0
while (count--) (function() { sum++ })()

執行一下
復制代碼代碼如下:

$ time node anonymous.js
real    0m1.456s
user    0m0.015s
sys     0m0.031s

 

再來看看命名函數

named.js

復制代碼代碼如下:

var count = 100000000
  , sum   = 0

 

var cb = function() {
  sum++
}

while (count--) cb()


執行一下
復制代碼代碼如下:

$ time node named.js
real    0m0.575s
user    0m0.000s
sys     0m0.046s

命名函數會快很多,為什么會這樣呢?其實不難解釋,匿名函數每次都需要重新解釋回調,但是命名函數只需要解釋一次,因此性能會有提升,但是測試發現這種提升是非常非常微小的,完全不必將非常順手的一個回調單獨寫成另外一個變量。

 

另外命名函數還有兩種寫法:

函數表達式

復制代碼代碼如下:

var func = function() {
  console.log('a')
}

函數聲明
復制代碼代碼如下:

function func() {
  console.log('b')
}

其實這兩個一起用的話可能會有問題,如
復制代碼代碼如下:

var func = function() {
  console.log('a')
}
function func() {
  console.log('b')
}
//輸出為: a

因此目前多使用函數表達式的形式,但函數聲明的性能如何呢?

 

named2.js

復制代碼代碼如下:

var count = 100000000
  , sum   = 0

 

function cb() {
  sum++
}

while (count--) cb()


執行一下,并比較二者
復制代碼代碼如下:

$ time node named.js
real    0m0.553s
user    0m0.000s
sys     0m0.015s

 

$ time node named2.js
real    0m0.529s
user    0m0.000s
sys     0m0.047s


似乎函數聲明會稍微快一點點,不過快得也非常非常不明顯,個人還是建議函數聲明式寫法。

 

PS: 此數據均在Windows7下使用git-base測試。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 海南省| 凤山县| 舞钢市| 龙南县| 基隆市| 齐齐哈尔市| 尤溪县| 象山县| 自贡市| 丰宁| 方山县| 明溪县| 泰和县| 福州市| 遂溪县| 新和县| 绥江县| 莆田市| 观塘区| 邓州市| 元江| 安泽县| 桓仁| 饶阳县| 邵武市| 揭东县| 美姑县| 临清市| 巧家县| 洞口县| 会东县| 津市市| 罗定市| 盘锦市| 江阴市| 宜章县| 台安县| 钟山县| 广宁县| 筠连县| 湖北省|