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 相关文章推荐
JavaScript 全面解析各种浏览器网页中的JS 执行顺序
Feb 17 Javascript
jQuery函数的等价原生函数代码示例
May 27 Javascript
基于JS如何实现给字符加千分符(65,541,694,158)
Aug 03 Javascript
Java与JavaScript中判断两字符串是否相等的区别
Mar 13 Javascript
使用canvas及js简单生成验证码方法
Apr 02 Javascript
详解JavaScript实现动态的轮播图效果
Apr 29 Javascript
React精髓!一篇全概括小结(急速)
May 23 Javascript
Vue内部渲染视图的方法
Sep 02 Javascript
vue实现Input输入框模糊查询方法
Jan 29 Javascript
JS实现动态倒计时功能(天数、时、分、秒)
Dec 12 Javascript
Vue项目接入Paypal实现示例详解
Jun 04 Javascript
Vue实现菜单切换功能
Nov 08 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
COM in PHP (winows only)
2006/10/09 PHP
在Mac OS上编译安装Nginx+PHP+MariaDB开发环境的教程
2016/02/23 PHP
PHP常用排序算法实例小结【基本排序,冒泡排序,快速排序,插入排序】
2017/02/07 PHP
js同时按下两个方向键
2007/12/01 Javascript
理解JSON:3分钟课程
2011/10/28 Javascript
ASP.NET jQuery 实例11 通过使用jQuery validation插件简单实现用户登录页面验证功能
2012/02/03 Javascript
Google的跟踪代码 动态加载js代码方法应用
2012/11/12 Javascript
JavaScript实现获取dom中class的方法
2015/02/09 Javascript
JavaScript中日期的相关操作方法总结
2015/10/24 Javascript
JS在一定时间内跳转页面及各种刷新页面的实现方法
2016/05/26 Javascript
使用bootstrapValidator插件进行动态添加表单元素并校验
2016/09/28 Javascript
jquery操作ul的一些操作笔记整理(干货)
2017/08/31 jQuery
vue 权限认证token的实现方法
2018/07/17 Javascript
vue+axios+mock.js环境搭建的方法步骤
2018/08/28 Javascript
在vue项目中使用md5加密的方法
2018/09/14 Javascript
Vue插槽原理与用法详解
2019/03/05 Javascript
浅谈redux, koa, express 中间件实现对比解析
2019/05/23 Javascript
vue在响应头response中获取自定义headers操作
2020/07/24 Javascript
原生js实现弹窗消息动画
2020/11/20 Javascript
uni-app 自定义底部导航栏的实现
2020/12/11 Javascript
Vue实现省市区三级联动
2020/12/27 Vue.js
Python程序员开发中常犯的10个错误
2014/07/07 Python
Python实现提取文章摘要的方法
2015/04/21 Python
Python实现变量数值交换及判断数组是否含有某个元素的方法
2017/09/18 Python
python2.7+selenium2实现淘宝滑块自动认证功能
2018/02/24 Python
Python sklearn库实现PCA教程(以鸢尾花分类为例)
2020/02/24 Python
Python手动或自动协程操作方法解析
2020/06/22 Python
英国儿童图书网站:Scholastic
2017/03/26 全球购物
关键字throw与throws的用法差异
2016/11/22 面试题
大学四年学习的自我评价分享
2013/12/09 职场文书
会计电算化专业自荐信
2014/03/15 职场文书
忠诚奉献演讲稿
2014/09/12 职场文书
党的群众路线教育实践活动查摆问题及整改措施
2014/10/10 职场文书
2014年妇联工作总结
2014/11/21 职场文书
总结Python使用过程中的bug
2021/06/18 Python
本地搭建minio文件服务器(使用bat脚本启动)的方法
2022/07/15 Servers