Javascript中匿名函数和命名函数的性能测试
我们经常写回调通过匿名函数(匿名函数)。简单地说,匿名是一个没有名字的函数,它通常是立即执行的,但是它的命名函数(命名函数)的性能如何呢
我们可以比较一下,让我们寻找一台能够执行shell命令的计算机,使用大量的函数调用来查看两个人执行消耗时间:
anonymous.js
复制代码代码如下所示:
var计数= 100000000
总和= 0
当(计数)(函数(){和})()
执行它
复制代码代码如下所示:
时间节点anonymous.js美元
真正的0m1.456s
用户0m0.015s
系统0m0.031s
再次查看命名函数。
named.js
复制代码代码如下所示:
var计数= 100000000
总和= 0
函数(){()
和+ +
}
当(计数)- CB()
执行它
复制代码代码如下所示:
时间节点named.js美元
真正的0m0.575s
用户0m0.000s
系统0m0.046s
命名函数会快得多。为什么不难解释,每个匿名函数都需要重新解释回调函数,但只需要解释一个命名函数,这样性能就会得到改善,但是测试发现提升很小,而不是一个回调,很容易将另一个变量写入另一个变量。
此外,还有两种命名法。
功能性表达
复制代码代码如下所示:
函数(){()
console.log(A)
}
函数声明
复制代码代码如下所示:
函数(){
console.log(B)
}
事实上,这两个词在一起可能有问题,例如
复制代码代码如下所示:
函数(){()
console.log(A)
}
函数(){
console.log(B)
}
输出:
现在我们使用函数表达式的形式,但是函数声明的性能如何呢
named2.js
复制代码代码如下所示:
var计数= 100000000
总和= 0
函数CB(){
和+ +
}
当(计数)- CB()
执行它,并比较两个
复制代码代码如下所示:
时间节点named.js美元
真正的0m0.553s
用户0m0.000s
系统0m0.015s
时间节点named2.js美元
真正的0m0.529s
用户0m0.000s
系统0m0.047s
似乎函数的语句会快一点,但是它非常非常模糊,并且个人建议函数应该用明确的方式写。
PS:这个数据是在Windows7的Git库测试。