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 相关文章推荐
效率高的Javscript字符串替换函数的benchmark
Aug 02 Javascript
JQuery SELECT单选模拟jQuery.select.js
Nov 12 Javascript
匹配任意字符的正则表达式写法
Apr 29 Javascript
JS获取url链接字符串 location.href
Dec 23 Javascript
JS实现仿百度输入框自动匹配功能的示例代码
Feb 19 Javascript
javascript单页面手势滑屏切换原理详解
Mar 21 Javascript
jQuery 自定义下拉框(DropDown)附源码下载
Jul 22 Javascript
微信小程序 限制1M的瘦身技巧与方法详解
Jan 06 Javascript
js实现百度搜索提示框
Feb 05 Javascript
jquery uploadify隐藏上传进度的实现方法
Feb 06 Javascript
JS插入排序简单理解与实现方法分析
Nov 25 Javascript
基于javascript实现贪吃蛇经典小游戏
Apr 10 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
php获得网站访问统计信息类Compete API用法实例
2015/04/02 PHP
PHP中SESSION的注销与清除
2015/04/16 PHP
php简单实现批量上传图片的方法
2016/05/09 PHP
PHP实现的简单操作SQLite数据库类与用法示例
2017/06/19 PHP
laravel多条件查询方法(and,or嵌套查询)
2019/10/09 PHP
js报错 Object doesn't support this property or method的原因分析
2011/03/31 Javascript
ASP.NET jQuery 实例6 (实现CheckBoxList成员全选或全取消)
2012/01/13 Javascript
js与jquery回车提交的方法
2015/02/03 Javascript
跟我学习javascript的var预解析与函数声明提升
2015/11/16 Javascript
javascript检测flash插件是否被禁用的方法
2016/01/14 Javascript
jQuery弹层插件jquery.fancybox.js用法实例
2016/01/22 Javascript
js设置和获取自定义属性的方法
2016/10/20 Javascript
vue实现列表的添加点击
2016/12/29 Javascript
Angular2中如何使用ngx-translate进行国际化
2017/05/21 Javascript
layer插件select选中默认值的方法
2018/08/14 Javascript
解决vue打包css文件中背景图片的路径问题
2018/09/03 Javascript
angular中子控制器向父控制器传值的实例
2018/10/08 Javascript
深入了解js原型模式
2019/05/30 Javascript
浅谈vuex为什么不建议在action中修改state
2020/02/02 Javascript
js实现简单的随机点名器
2020/09/17 Javascript
python写入xml文件的方法
2015/05/08 Python
python连接MySQL数据库实例分析
2015/05/12 Python
python 删除列表里所有空格项的方法总结
2018/04/18 Python
python远程连接服务器MySQL数据库
2018/07/02 Python
pandas使用get_dummies进行one-hot编码的方法
2018/07/10 Python
使用Python制作简单的小程序IP查看器功能
2019/04/16 Python
CSS3中Transition动画属性用法详解
2016/07/04 HTML / CSS
雪花秀美国官方网站:韩国著名草本护肤化妆品品牌
2016/10/19 全球购物
回馈慈善的设计师太阳镜:DIFF eyewear
2019/10/17 全球购物
Delphi CS笔试题
2014/01/04 面试题
机械制造与自动化应届生求职信
2013/11/16 职场文书
第二批党的群众路线教育实践活动总结报告
2014/10/30 职场文书
2014年销售工作总结
2014/12/01 职场文书
初中生活随笔
2015/08/15 职场文书
小程序教您怎样你零成本推广获取数万用户的方法
2019/07/30 职场文书
使用Python开发冰球小游戏
2022/04/30 Python