JavaScript中匿名、命名函数的性能测试


Posted in Javascript onSeptember 04, 2014

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

Javascript 相关文章推荐
PJ Blog修改-禁止复制的代码和方法
Oct 25 Javascript
js或css文件后面跟参数的原因说明
Jan 09 Javascript
javascript dom追加内容实现示例
Sep 21 Javascript
关于JavaScript命名空间的一些心得
Jun 07 Javascript
深入探密Javascript数组方法
Jan 08 Javascript
Js与Jq 获取页面元素值的方法和差异对比
Apr 30 Javascript
JS实现不使用图片仿Windows右键菜单效果代码
Oct 22 Javascript
Jquery实现的简单轮播效果【附实例】
Apr 19 Javascript
js判断手机浏览器操作系统和微信浏览器的方法
Apr 30 Javascript
js中创建对象的几种方式
Feb 05 Javascript
JavaScript数据类型和变量_动力节点Java学院整理
Jun 26 Javascript
生产制造追溯系统之再说条码打印
Jun 03 Javascript
容易造成JavaScript内存泄露几个方面
Sep 04 #Javascript
require.js深入了解 require.js特性介绍
Sep 04 #Javascript
用console.table()调试javascript
Sep 04 #Javascript
js设置cookie过期当前时间减去一秒相当于立即过期
Sep 04 #Javascript
使用JSON.parse将json字符串转换成json对象的时候会出错
Sep 04 #Javascript
jQuery之Deferred对象详解
Sep 04 #Javascript
Javascript Objects详解
Sep 04 #Javascript
You might like
全国FM电台频率大全 - 25 云南省
2020/03/11 无线电
dedecms 制作模板中使用的全局标记图文教程
2007/03/11 PHP
PHP获取url的函数代码
2011/08/02 PHP
PHP中实现Bloom Filter算法
2015/03/30 PHP
laravel5实现微信第三方登录功能
2018/12/06 PHP
PHP批斗大会之缺失的异常详解
2019/07/09 PHP
使用laravel和ECharts实现折线图效果的例子
2019/10/09 PHP
js下判断 iframe 是否加载完成的完美方法
2010/10/26 Javascript
判断对象是否Window的实现代码
2012/01/10 Javascript
关闭浏览器窗口弹出提示框并且可以控制其失效
2014/04/15 Javascript
jQuery插件echarts设置折线图中折线线条颜色和折线点颜色的方法
2017/03/03 Javascript
JavaScript创建对象_动力节点Java学院整理
2017/06/27 Javascript
深入理解ES6 Promise 扩展always方法
2017/09/26 Javascript
使用 Javascript 实现浏览器推送提醒功能的示例
2017/11/03 Javascript
uni-app微信小程序登录并使用vuex存储登录状态的思路详解
2019/11/04 Javascript
vue vant Area组件使用详解
2019/12/09 Javascript
[17:36]VG战队纪录片
2014/08/21 DOTA
[01:03]DOTA2新的征程 你的脚印值得踏上
2014/08/13 DOTA
[00:49]完美世界DOTA2联赛10月28日开团时刻:随便打
2020/10/29 DOTA
Python合并多个装饰器小技巧
2015/04/28 Python
python3.6 实现AES加密的示例(pyCryptodome)
2018/01/10 Python
python实现桌面壁纸切换功能
2019/01/21 Python
Django集成CAS单点登录的方法示例
2019/06/10 Python
纯CSS3实现Material Design效果
2017/03/09 HTML / CSS
澳大利亚最好的在线时尚精品店:Princess Polly
2018/01/03 全球购物
可持续未来的时尚基础:Alternative Apparel
2019/05/06 全球购物
Mountain Warehouse波兰官方网站:英国户外品牌
2019/08/29 全球购物
Linux如何命名文件--使用文件名时应注意
2014/05/29 面试题
护理个人求职信范文
2014/01/08 职场文书
房产委托公证书
2014/04/08 职场文书
医学专业大学生职业生涯规划书
2014/10/25 职场文书
大班上学期个人总结
2015/02/13 职场文书
地震慰问信
2015/02/14 职场文书
冰雪公主观后感
2015/06/16 职场文书
python 经纬度求两点距离、三点面积操作
2021/06/03 Python
SqlServer常用函数及时间处理小结
2023/05/08 SQL Server