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 input 数字验证代码
Jul 30 Javascript
jQuery 学习第五课 Ajax 使用说明
May 17 Javascript
JavaScript常用脚本汇总(二)
Mar 04 Javascript
JQuery自适应窗口大小导航菜单附源码下载
Sep 01 Javascript
谈谈encodeURI和encodeURIComponent以及escape的区别与应用
Nov 24 Javascript
js 判断登录界面的账号密码是否为空
Feb 08 Javascript
巧用weui.topTips验证数据的实例
Apr 17 Javascript
浅谈使用React.setState需要注意的三点
Dec 18 Javascript
JS实现的简单分页功能示例
Aug 23 Javascript
利用Dectorator分模块存储Vuex状态的实现
Feb 05 Javascript
vue cli使用融云实现聊天功能的实例代码
Apr 19 Javascript
js如何验证密码强度
Mar 18 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
中国第一家无线电行
2021/03/01 无线电
水质对咖图啡风味的影响具体有哪些
2021/03/03 冲泡冲煮
4.与数据库的连接
2006/10/09 PHP
建立文件交换功能的脚本(二)
2006/10/09 PHP
将数组写入txt文件 var_export
2009/04/21 PHP
php利用腾讯ip分享计划获取地理位置示例分享
2014/01/20 PHP
PHP 数组遍历foreach语法结构及实例
2016/06/13 PHP
php使用ftp实现文件上传与下载功能
2017/07/21 PHP
jquery星级插件、支持页面中多次使用
2012/03/25 Javascript
jQuery中queue()方法用法实例
2014/12/29 Javascript
分享10个优化代码的CSS和JavaScript工具
2016/05/11 Javascript
js实现瀑布流效果(自动生成新的内容)
2017/03/16 Javascript
jQuery实现浏览器之间跳转并传递参数功能【支持中文字符】
2018/03/28 jQuery
jQuery实现模糊搜索功能的方法分析
2018/06/29 jQuery
vue2.0 使用element-ui里的upload组件实现图片预览效果方法
2018/09/04 Javascript
Vue动态加载异步组件的方法
2018/11/21 Javascript
自定义Vue中的v-module双向绑定的实现
2019/04/17 Javascript
使用VueRouter的addRoutes方法实现动态添加用户的权限路由
2019/06/03 Javascript
javascript设计模式 ? 代理模式原理与用法实例分析
2020/04/16 Javascript
[49:28]VP vs Optic 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/17 DOTA
Python与人工神经网络:使用神经网络识别手写图像介绍
2017/12/19 Python
python数据分析数据标准化及离散化详解
2018/02/26 Python
Python开启线程,在函数中开线程的实例
2019/02/22 Python
使用python判断jpeg图片的完整性实例
2019/06/10 Python
django中间键重定向实例方法
2019/11/10 Python
Numpy(Pandas)删除全为零的列的方法
2020/09/11 Python
英国网上花店:Bunches
2016/11/29 全球购物
可打印的优惠券、杂货和优惠券代码:Coupons.com
2018/06/12 全球购物
英国领先的野生鸟类食品供应商:GardenBird
2018/08/09 全球购物
Hotels.com泰国:酒店预订网站
2019/11/20 全球购物
迪斯尼假期(欧洲、中东及非洲):Disney Holidays EMEA
2021/02/15 全球购物
什么是数据库锁?Oracle中都有哪些类型的锁?
2015/08/21 面试题
企业文化标语大全
2014/06/10 职场文书
学生旷课检讨书500字
2014/10/28 职场文书
2015年社区重阳节活动总结
2015/07/30 职场文书
Docker下安装Oracle19c
2022/04/13 Servers