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 相关文章推荐
js replace 与replaceall实例用法详解
Aug 03 Javascript
javascript 获取网页标题代码实例
Jan 22 Javascript
浅谈被jQuery抛弃的函数及替代函数
May 03 Javascript
js防阻塞加载的实现方法
Sep 09 Javascript
js手动播放图片实现图片轮播效果
Sep 17 Javascript
javascript 中的事件委托详解
Oct 25 Javascript
原生JS实现ajax与ajax的跨域请求实例
Dec 01 Javascript
详解vue2.0+axios+mock+axios-mock+adapter实现登陆
Jul 19 Javascript
JavaScript使用闭包模仿块级作用域操作示例
Jan 21 Javascript
js+html5 canvas实现ps钢笔抠图
Apr 28 Javascript
webpack-mvc 传统多页面组件化开发详解
May 07 Javascript
vue cli3.0打包上线静态资源找不到路径的解决操作
Aug 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
打造计数器DIY三步曲(上)
2006/10/09 PHP
web server使用php生成web页面的三种方法总结
2013/10/28 PHP
ThinkPHP3.1新特性之对分组支持的改进与完善概述
2014/06/19 PHP
PHP实现的比较完善的购物车类
2014/12/02 PHP
递归实现php数组转xml的代码分享
2015/05/14 PHP
深入理解PHP内核(一)
2015/11/10 PHP
PHP设计模式之观察者模式实例
2016/02/22 PHP
js 表格隔行颜色
2009/12/02 Javascript
jquery.lazyload  实现图片延迟加载jquery插件
2010/02/06 Javascript
JavaScript ( (__ = !$ + $)[+$] + ({} + $)[_/_] +({} + $)[_/_] )
2011/02/25 Javascript
js实现图片放大缩小功能后进行复杂排序的方法
2012/11/08 Javascript
鼠标滑在标题上显示图片的JS代码
2013/11/19 Javascript
JavaScript文档碎片操作实例分析
2015/12/12 Javascript
分享javascript实现的冒泡排序代码并优化
2016/06/05 Javascript
探讨AngularJs中ui.route的简单应用
2016/11/16 Javascript
JS 学习总结之正则表达式的懒惰性和贪婪性
2017/07/03 Javascript
js实现多张图片延迟加载效果
2017/07/17 Javascript
Vue 创建组件的两种方法小结(必看)
2018/02/23 Javascript
解决vue更新路由router-view复用组件内容不刷新的问题
2019/11/04 Javascript
Python函数式编程指南(二):从函数开始
2015/06/24 Python
Python3中简单的文件操作及两个简单小实例分享
2017/06/18 Python
python实现扫描日志关键字的示例
2018/04/28 Python
Python 多维List创建的问题小结
2019/01/18 Python
Linux上使用Python统计每天的键盘输入次数
2019/04/17 Python
Python matplotlib绘制饼状图功能示例
2019/09/10 Python
python 中的paramiko模块简介及安装过程
2020/02/29 Python
matplotlib 画双轴子图无法显示x轴的解决方法
2020/07/27 Python
Django Form常用功能及代码示例
2020/10/13 Python
手把手教你从PyCharm安装到激活(最新激活码),亲测有效可激活至2089年
2020/11/25 Python
大学生表扬信范文
2014/01/09 职场文书
干部培训自我鉴定
2014/01/22 职场文书
汽车装潢店创业计划书范文
2014/02/05 职场文书
创业计划书如何编写
2014/02/06 职场文书
部门年终奖分配方案
2014/05/07 职场文书
英语专业毕业论文答辩开场白
2015/05/27 职场文书
先进教师个人主要事迹材料
2015/11/03 职场文书