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中获取请求的URL参数[正则]
Dec 25 Javascript
js实现键盘Enter键提交表单的方法
May 27 Javascript
jQuery+PHP实现可编辑表格字段内容并实时保存
Oct 09 Javascript
JavaScript截取指定长度字符串点击可以展开全部代码
Dec 04 Javascript
BootStrap table表格插件自适应固定表头(超好用)
Aug 24 Javascript
jQuery鼠标悬停内容动画切换效果
Apr 27 jQuery
Vue2.x中的父子组件相互通信的实现方法
May 02 Javascript
浅谈JS中的反柯里化( uncurrying)
Aug 17 Javascript
JS模拟超市简易收银台小程序代码解析
Aug 18 Javascript
Vue.js 实现微信公众号菜单编辑器功能(二)
May 08 Javascript
微信小程序 弹窗输入组件的实现解析
Aug 12 Javascript
vue+axios全局添加请求头和参数操作
Jul 24 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学习笔记之字符串编码的转换和判断
2014/05/22 PHP
CodeIgniter整合Smarty的方法详解
2017/08/25 PHP
关于URL中的特殊符号使用介绍
2011/11/03 Javascript
JS中令人发指的valueOf方法介绍
2013/02/22 Javascript
firefox浏览器不支持innerText的解决方法
2013/08/07 Javascript
javascript根据像素点取位置示例
2014/01/27 Javascript
javascript关于继承的用法汇总
2014/12/20 Javascript
javascript正则表达式基础知识入门
2015/04/20 Javascript
Boostrap入门准备之border box
2016/05/09 Javascript
Node.js+Express配置入门教程详解
2016/05/19 Javascript
页面get请求 中文参数方法乱码问题的快速解决方法
2016/05/31 Javascript
基于BootStrap实现局部刷新分页实例代码
2016/08/08 Javascript
Vue.js仿微信聊天窗口展示组件功能
2017/08/11 Javascript
浅谈js的解析顺序 作用域 严格模式
2017/10/23 Javascript
Js经典案例的实例代码
2018/05/10 Javascript
Postman的下载及安装教程详解
2018/10/16 Javascript
微信小程序日历插件代码实例
2019/12/04 Javascript
Vue通过Blob对象实现导出Excel功能示例代码
2020/07/31 Javascript
Vue指令实现OutClick的示例
2020/11/16 Javascript
[23:18]Spirit vs Liquid Supermajor小组赛A组 BO3 第二场 6.2
2018/06/03 DOTA
python简单实现计算过期时间的方法
2015/06/09 Python
python 调用win32pai 操作cmd的方法
2017/05/28 Python
python 分离文件名和路径以及分离文件名和后缀的方法
2018/10/21 Python
Scrapy框架使用的基本知识
2018/10/21 Python
Python中利用aiohttp制作异步爬虫及简单应用
2018/11/29 Python
flask session组件的使用示例
2018/12/25 Python
Django模板导入母版继承和自定义返回Html片段过程解析
2019/09/18 Python
在Django中预防CSRF攻击的操作
2020/03/13 Python
python 获取字典特定值对应的键的实现
2020/09/29 Python
Vans奥地利官方网站:美国原创极限运动潮牌
2018/09/30 全球购物
旅游管理本科生求职信
2013/10/14 职场文书
统计系教授推荐信
2014/02/28 职场文书
2014年学校党建工作汇报材料
2014/11/02 职场文书
环保守法证明
2015/06/24 职场文书
导游词之宁夏贺兰山岩画
2019/11/08 职场文书
Python 键盘事件详解
2021/11/11 Python