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 相关文章推荐
jquery 学习之二 属性 文本与值(text,val)
Nov 25 Javascript
jquery 操作css样式、位置、尺寸方法汇总
Nov 28 Javascript
jQuery调用ajax请求的常见方法汇总
Mar 24 Javascript
JavaScript如何实现对数字保留两位小数一位自动补零
Dec 18 Javascript
Markdown与Bootstrap相结合实现图片自适应属性
May 04 Javascript
vue.js入门教程之绑定class和style样式
Sep 02 Javascript
jquery+css3问卷答题卡翻页动画效果示例
Oct 26 Javascript
通过AngularJS实现图片上传及缩略图展示示例
Jan 03 Javascript
JS实现数组去重及数组内对象去重功能示例
Feb 02 Javascript
Vue 实现从文件中获取文本信息的方法详解
Oct 16 Javascript
JS实现电商商品展示放大镜特效
Jan 07 Javascript
vue中echarts图表大小适应窗口大小且不需要刷新案例
Jul 19 Javascript
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
几个php应用技巧
2008/03/27 PHP
PHP中对缓冲区的控制实现代码
2013/09/29 PHP
PHP中session变量的销毁
2014/02/27 PHP
PHP使用GIFEncoder类生成的GIF动态图片验证码
2014/07/01 PHP
Yii框架中memcache用法实例
2014/12/03 PHP
PHP检测用户语言的方法
2015/06/15 PHP
yii2局部关闭(开启)csrf的验证的实例代码
2017/07/10 PHP
一个可以随意添加多个序列的tag函数
2009/07/21 Javascript
基于Jquery的将DropDownlist的选中值赋给label的实现代码
2011/05/06 Javascript
js二级地域选择的实现方法
2013/06/17 Javascript
JavaScript打印网页指定区域的例子
2014/05/03 Javascript
JavaScript通过字符串调用函数的实现方法
2015/03/18 Javascript
jQuery的end()方法使用详解
2015/07/15 Javascript
JavaScript实现的CRC32函数示例
2016/11/23 Javascript
bootstrap实现图片自动轮播
2016/12/21 Javascript
JS实现的模仿QQ头像资料卡显示与隐藏效果
2017/04/07 Javascript
JavaScript实现打印星型金字塔功能实例分析
2017/09/27 Javascript
解决在vue+webpack开发中出现两个或多个菜单公用一个组件问题
2017/11/28 Javascript
vue异步axios获取的数据渲染到页面的方法
2018/08/09 Javascript
jQuery简单实现根据日期计算星期几的方法
2019/01/09 jQuery
图解javascript作用域链
2019/05/27 Javascript
微信小程序开发常见问题及解决方案
2019/07/11 Javascript
JS回调函数简单易懂的入门实例分析
2019/09/29 Javascript
Node.js操作MongoDB数据库实例分析
2020/01/19 Javascript
[01:12]快闪回顾DOTA2亚洲邀请赛(DAC) 静候2018新征程开启
2018/03/11 DOTA
Python处理文本文件中控制字符的方法
2017/02/07 Python
Windows平台Python连接sqlite3数据库的方法分析
2017/07/12 Python
python web.py开发httpserver解决跨域问题实例解析
2018/02/12 Python
Pytorch自定义Dataset和DataLoader去除不存在和空数据的操作
2021/03/03 Python
CSS3 :not()选择器实现最后一行li去除某种css样式
2016/10/19 HTML / CSS
JOSEPH官网:英国奢侈时尚品牌
2018/01/31 全球购物
英国在线定做百叶窗网站:Make My Blinds
2020/08/17 全球购物
C/C++有关内存的思考题
2015/12/04 面试题
高中竞选班长演讲稿
2014/04/24 职场文书
初中体育教学随笔
2015/08/15 职场文书
《全神贯注》教学反思
2016/02/22 职场文书