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
Nov 25 Javascript
javascript 读取图片文件的大小
Jun 25 Javascript
前端开发的开始---基于面向对象的Ajax类
Sep 17 Javascript
js实现带搜索功能的下拉框实时搜索实时匹配
Nov 05 Javascript
jQuery(js)获取文字宽度(显示长度)示例代码
Dec 31 Javascript
JavaScript前端图片加载管理器imagepool使用详解
Dec 29 Javascript
jQuery实现平滑滚动到指定锚点的方法
Mar 20 Javascript
js带前后翻页的图片切换效果代码分享
Sep 08 Javascript
jQuery删除节点用法示例(remove方法)
Sep 08 Javascript
jquery Ajax实现Select动态添加数据
Jun 08 jQuery
总结JavaScript在IE9之前版本中内存泄露问题
Apr 28 Javascript
在Vue项目中,防止页面被缩放和放大示例
Oct 28 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/04 无线电
请php正则走开
2008/03/15 PHP
基于PHP 面向对象之成员方法详解
2013/05/04 PHP
php加速器eAccelerator的配置参数、API详解
2014/05/05 PHP
php简单定时执行任务的实现方法
2015/02/23 PHP
php实现的pdo公共类定义与用法示例
2017/07/19 PHP
PHP实现函数内修改外部变量值的方法示例
2018/12/28 PHP
Laravel5.5 动态切换多语言的操作方式
2019/10/25 PHP
基于逻辑运算的简单权限系统(实现) JS 版
2007/03/24 Javascript
javascript YUI 读码日记之 YAHOO.util.Dom - Part.4
2008/03/22 Javascript
使用SyntaxHighlighter实现HTML高亮显示代码的方法
2010/02/04 Javascript
IE不支持getElementsByClassName最终完美解决方案
2012/12/17 Javascript
jquery操作cookie插件分享
2014/01/14 Javascript
Node.js中的事件驱动编程详解
2014/08/16 Javascript
js基于cookie方式记住返回页面用法示例
2016/05/27 Javascript
JavaScript的兼容性与调试技巧
2016/11/22 Javascript
原生js实现无缝轮播图效果
2017/01/11 Javascript
ionic2屏幕适配实现适配手机、平板等设备的示例代码
2017/08/11 Javascript
深入理解Vue.js源码之事件机制
2017/09/27 Javascript
用Node提供静态文件服务的方法
2018/07/06 Javascript
Vue-Cli 3.0 中配置高德地图的两种方式
2019/06/19 Javascript
vue 中 命名视图的用法实例详解
2019/08/14 Javascript
详解node登录接口之密码错误限制次数(含代码)
2019/10/25 Javascript
使用Angular9和TypeScript开发RPG游戏的方法
2020/03/25 Javascript
Python中列表和元组的使用方法和区别详解
2020/12/30 Python
详解如何使用Python编写vim插件
2017/11/28 Python
Django框架使用mysql视图操作示例
2019/05/15 Python
django创建最简单HTML页面跳转方法
2019/08/16 Python
django使用graphql的实例
2020/09/02 Python
Spartoo西班牙官网:法国时尚购物网站
2018/03/27 全球购物
个人评价范文分享
2014/01/11 职场文书
人事助理自荐信
2014/02/02 职场文书
企业演讲比赛主持词
2014/03/18 职场文书
领导班子四风问题个人对照检查材料
2014/10/04 职场文书
廉政文化进校园广播稿
2014/10/20 职场文书
清明节主题班会
2015/08/14 职场文书