js 函数性能比较方法


Posted in Javascript onAugust 24, 2020

在学习js过程中,经常会遇到同样一个功能点 这样实现也可以,那样实现也可以。但是哪个方式最优呢?自己写了一个简短的proferencesCompare 函数。代码如下:

/**
	 * 函数性能比较
	 * @param fns 要比较的函数数组
	 * @args 每个要比较函数在执行的时候传入的参数,可以是数组,或者 被调用后 返回数组类型
	 * @repeatCount 每个函数重复执行的次数,多次执行 拉开差距。默认值10000
	 * 
	 * @return [{runTime:执行repeatCount次总时间,repeatCount:重复执行次数,name:函数名称,chrome是函数名,IE由于不支持funciton.name,所以默认 fn+函数在fns中index}]
	 * */
	function proferencesCompare(fns, args, repeatCount) {
		var tmpArgs, tmpFns;
		var result = [];
		var starTime, endTime;
		var i = 0;
		var repeatCount = repeatCount || 10000;
		var isFunction = false;
		if(fns === undefined) {
			throw Error('Must have the compare funciton');
		}
 
		var typeName = typeof args;
 
		//检测传入的args是否能够返回array类型数据
		if(typeName === 'function') {
			tmpArgs = args();
			isFunction = true;
		}
 
		if(typeName === 'number') {
			tmpArgs = [];
			repeatCount = args;
		}
 
		//检测args 是否为 array
		if(Object.prototype.toString.call(tmpArgs) !== '[object Array]') {
			throw Error('The test args is must a array or a function which return the array');
		}
 
		var len = fns.length;
		for(; i < len; i++) {
			var fnName = fns[i].name || "fn" + i;
			starTime = Date.now();
			console.time(fnName);
			for(var j = 0; j < repeatCount; j++) {
				if(isFunction && (i !== 0 || j !== 0)) {
					//如果args是函数,并且循环是第一次进入,则不需要再执行一次。前面做args检测时已经执行过一次
					tmpArgs = args();
				}
				fns[i].apply(this, tmpArgs);
			}
			console.timeEnd(fnName);
			endTime = Date.now();
			result.push({ runTime: endTime - starTime, repeatCount: repeatCount, name: fnName });
		}
		return result;
	}

使用例子如下:

var fn1 = function() {
		var a;
		return !a;
	}
 
var fn2 = function() {
		var a;
		return a === undefined;
	}
 
var fn3 = function() {
		var a;
		return a == undefined;
	}
 
var result = proferencesCompare([fn1, fn2, fn3, fn3, fn2, fn1], 1000000000);

这个例子主要比较 对于函数中 判断对象是否为undefined 的几种实现方式的性能比较。

chrome:

js 函数性能比较方法

结果显示 其实性能差不多。

下面是其他同学的补充

快速比较代码执行效率的方法

测试效率可以使用Stopwatch :

Stopwatch sw = new Stopwatch();
sw.Start();//写在要执行的代码前面

sw.Stop();//写在要执行的代码结尾
sw.Elapsed//得到代码执行时间

核心函数

int[] array = { 15,20,10,3,5};
Stopwatch sw = new Stopwatch();
sw.Start();

for (int i = 0; i < array.Length - 1; i++) {
  for (int j = i + 1; j < array.Length; j++) {
    if (array[i] > array[j]) {

      int temp = array[i];
      array[i] = array[j];
      array[j] = temp;
    }
  }
}
sw.Stop();
Console.WriteLine(sw.Elapsed);

到此这篇关于js 函数性能比较方法的文章就介绍到这了,更多相关js 函数性能内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Javascript 相关文章推荐
JavaScript 高级篇之闭包、模拟类,继承(五)
Apr 07 Javascript
javascript针对DOM的应用实例(一)
Apr 15 Javascript
javascript禁制后退键(Backspace)实例代码
Nov 15 Javascript
使用javascript实现雪花飘落的效果
Jan 13 Javascript
JavaScript判断是否为数字的4种方法及效率比较
Apr 01 Javascript
JavaScript中的数据类型转换方法小结
Oct 26 Javascript
js实现按钮控制带有停顿效果的图片滚动
Aug 30 Javascript
详解Vue自定义过滤器的实现
Jan 10 Javascript
protractor的安装与基本使用教程
Jul 07 Javascript
Angular实现的日程表功能【可添加及隐藏显示内容】
Dec 27 Javascript
js简单遍历获取对象中的属性值的方法示例
Jun 19 Javascript
分享一个vue实现的记事本功能案例
Apr 11 Vue.js
JavaScript实现简单验证码
Aug 24 #Javascript
JavaScript经典案例之简易计算器
Aug 24 #Javascript
原生js实现拖拽移动与缩放效果
Aug 24 #Javascript
JavaScript实现拖拽和缩放效果
Aug 24 #Javascript
Jquery 获取相同NAME 或者id删除行操作
Aug 24 #jQuery
JavaScript实现矩形块大小任意缩放
Aug 25 #Javascript
VSCode插件安装完成后的配置(常用配置)
Aug 24 #Javascript
You might like
PHP5.0正式发布 不完全兼容PHP4 新增多项功能
2006/10/09 PHP
PHP版QQ互联OAuth示例代码分享
2015/07/05 PHP
PHP生成随机密码方法汇总
2015/08/27 PHP
Yii全局函数用法示例
2017/01/22 PHP
PHP判断访客是否手机端(移动端浏览器)访问的方法总结【4种方法】
2019/03/27 PHP
JavaScript获取图片的原始尺寸以宽度为例
2014/05/04 Javascript
JS中实现简单Formatter函数示例代码
2014/08/19 Javascript
JavaScript中的全局对象介绍
2015/01/01 Javascript
jQuery焦点控制图层展示延迟隐藏的方法
2015/03/09 Javascript
js利用appendChild对标签进行排序的实现方法
2016/10/16 Javascript
jQuery插件echarts实现的循环生成图效果示例【附demo源码下载】
2017/03/04 Javascript
jQuery源码解读之extend()与工具方法、实例方法详解
2017/03/30 jQuery
react 实现页面代码分割、按需加载的方法
2018/04/03 Javascript
vue实现微信获取用户信息的方法
2019/03/21 Javascript
Vue循环中多个input绑定指定v-model实例
2020/08/31 Javascript
[04:04]显微镜下的DOTA2第六期——电影级别的华丽团战
2014/06/20 DOTA
Python实现并行抓取整站40万条房价数据(可更换抓取城市)
2016/12/14 Python
深入理解python对json的操作总结
2017/01/05 Python
Python使用filetype精确判断文件类型
2017/07/02 Python
利用Python自带PIL库扩展图片大小给图片加文字描述的方法示例
2017/08/08 Python
解决Python print输出不换行没空格的问题
2018/11/14 Python
python向图片里添加文字
2019/11/26 Python
python实现scrapy爬虫每天定时抓取数据的示例代码
2021/01/27 Python
利用纯CSS3实现文字向右循环闪过效果实例(可用于移动端)
2017/06/15 HTML / CSS
专科毕业生学习生活的自我评价
2013/10/26 职场文书
制药工程专业个人求职自荐信
2014/01/25 职场文书
房地产广告策划方案
2014/05/15 职场文书
投标保密承诺书
2014/05/19 职场文书
纪检干部个人对照检查材料
2014/09/23 职场文书
2014年客房部工作总结
2014/11/22 职场文书
党建工作目标管理责任书
2015/01/29 职场文书
团员年度个人总结
2015/02/26 职场文书
博士论文答辩开场白
2015/06/01 职场文书
企业催款函范本
2015/06/24 职场文书
mysql聚集索引、辅助索引、覆盖索引、联合索引的使用
2022/02/12 MySQL
请求模块urllib之PYTHON爬虫的基本使用
2022/04/08 Python