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 相关文章推荐
经典的带阴影的可拖动的浮动层
Jun 26 Javascript
网上抓的一个特效
May 11 Javascript
javascript 数组排序函数
Aug 20 Javascript
js+html+css实现鼠标移动div实例
Jan 30 Javascript
JavaScript中把数字转换为字符串的程序代码
Jun 19 Javascript
根据身份证号自动输出相关信息(籍贯,出身日期,性别)
Nov 15 Javascript
js实现正方形颜色从下往上升的效果
Aug 04 Javascript
jQuery实现的fixedMenu下拉菜单效果代码
Aug 24 Javascript
基于jQuery实现点击弹出层实例代码
Jan 01 Javascript
javascript事件委托的用法及其好处简析
Apr 04 Javascript
js实现HTML中Select二级联动的实例
Jan 05 Javascript
maptalks+three.js+vue webpack实现二维地图上贴三维模型操作
Aug 10 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多线程批量采集下载美女图片的实现代码(续)
2013/06/03 PHP
PHP判断函数是否被定义的方法
2019/06/21 PHP
JavaScript中的闭包原理分析
2010/03/08 Javascript
js的逻辑运算符 ||
2010/05/31 Javascript
js打开新窗口方法整理
2014/02/17 Javascript
用javascript读取xml文件读取节点数据
2014/08/12 Javascript
最精简的JavaScript实现鼠标拖动效果的方法
2015/05/11 Javascript
jQuery实现的点赞随机数字显示动画效果(附在线演示与demo源码下载)
2015/12/31 Javascript
以WordPress为例讲解jQuery美化页面Title的方法
2016/05/23 Javascript
如何利用JSHint减少JavaScript的错误
2016/08/23 Javascript
Vue.js双向绑定操作技巧(初级入门)
2016/12/27 Javascript
Vue进度条progressbar组件功能
2018/04/17 Javascript
vant(ZanUi)结合async-validator实现表单验证的方法
2018/12/06 Javascript
教你完全理解ReentrantLock重入锁
2019/06/03 Javascript
vue input标签通用指令校验的实现
2019/11/05 Javascript
NodeJS多种创建WebSocket监听的方式(三种)
2020/06/04 NodeJs
关于JavaScript数组去重的一些理解汇总
2020/09/10 Javascript
vue表单验证之禁止input输入框输入空格
2020/12/03 Vue.js
[04:05]TI9战队采访 - Natus Vincere
2019/08/22 DOTA
Python Django使用forms来实现评论功能
2016/08/17 Python
python中Switch/Case实现的示例代码
2017/11/09 Python
浅谈pandas中DataFrame关于显示值省略的解决方法
2018/04/08 Python
解决Django一个表单对应多个按钮的问题
2019/07/18 Python
python 多进程并行编程 ProcessPoolExecutor的实现
2019/10/11 Python
tensorflow的ckpt及pb模型持久化方式及转化详解
2020/02/12 Python
Tensorflow之梯度裁剪的实现示例
2020/03/08 Python
python 获取剪切板内容的两种方法
2020/11/28 Python
利用canvas实现图片下载功能来实现浏览器兼容问题
2019/05/31 HTML / CSS
美国新娘礼品店:The Paisley Box
2020/09/08 全球购物
经典婚礼主持词
2014/03/13 职场文书
导师评语大全
2014/04/26 职场文书
村主任个人对照检查材料
2014/10/01 职场文书
联欢会开场白
2015/06/01 职场文书
python基于OpenCV模板匹配识别图片中的数字
2021/03/31 Python
Redis基于Bitmap实现用户签到功能
2021/06/20 Redis
Java移除无效括号的方法实现
2021/08/07 Java/Android