视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
JavaScript中匿名、命名函数的性能测试_基础知识
2020-11-27 21:26:56 责编:小采
文档


我们经常通过匿名函数(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测试。

下载本文
显示全文
专题