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 相关文章推荐
延时重复执行函数 lLoopRun.js
May 08 Javascript
JSON 学习之完全手册 图文
May 29 Javascript
jQuery技巧总结
Jan 01 Javascript
jquery mobile事件多次绑定示例代码
Sep 13 Javascript
js 通过cookie实现刷新不变化树形菜单
Oct 30 Javascript
javascript中FOREACH数组方法使用示例
Mar 01 Javascript
jQuery中的each()详细介绍(推荐)
May 25 Javascript
jquery实现简单Tab切换菜单效果
Jul 17 Javascript
Node.js中防止错误导致的进程阻塞的方法
Aug 11 Javascript
JQuery获取鼠标进入和离开容器的方向
Dec 29 Javascript
防止重复发送 Ajax 请求
Feb 15 Javascript
jQuery选择器之表单元素选择器详解
Sep 19 jQuery
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
使用php4加速网络传输
2006/10/09 PHP
Codeigniter实现多文件上传并创建多个缩略图
2014/06/12 PHP
PHP调试的强悍利器之PHPDBG
2016/02/22 PHP
PHP设计模式之适配器模式(Adapter)原理与用法详解
2019/12/12 PHP
laravel框架select2多选插件初始化默认选中项操作示例
2020/02/18 PHP
javascript与CSS复习(二)
2010/06/29 Javascript
jquery 合并内容相同的单元格(示例代码)
2013/12/13 Javascript
jsp网页搜索结果中实现选中一行使其高亮
2014/02/17 Javascript
三种动态加载js的jquery实例代码另附去除js方法
2014/04/30 Javascript
js实现仿网易点击弹出提示同时背景变暗效果
2015/08/13 Javascript
理解javascript中的with关键字
2016/02/15 Javascript
JavaScript浮点数及运算精度调整详解
2016/10/21 Javascript
完全深入学习Bootstrap表单
2016/11/28 Javascript
vue-dialog的弹出层组件
2020/05/25 Javascript
vue mint-ui学习笔记之picker的使用
2017/10/11 Javascript
使用Vue-Router 2实现路由功能实例详解
2017/11/14 Javascript
Node.js + express基本用法教程
2019/03/14 Javascript
JavaScript find()方法及返回数据实例
2020/04/30 Javascript
Django中URL视图函数的一些高级概念介绍
2015/07/20 Python
PyCharm汉化安装及永久激活详细教程(靠谱)
2020/01/16 Python
python实现时间序列自相关图(acf)、偏自相关图(pacf)教程
2020/06/03 Python
keras load model时出现Missing Layer错误的解决方式
2020/06/11 Python
Crocs卡骆驰洞洞鞋日本官方网站:Crocs日本
2016/08/25 全球购物
奥地利汽车配件店:Pkwteile.at
2017/03/10 全球购物
乌克兰时尚鞋子和衣服购物网站:Born2be
2018/05/24 全球购物
Dower & Hall官网:英国小众轻奢珠宝品牌
2019/01/31 全球购物
自考自我鉴定范文
2013/10/30 职场文书
毕业生应聘幼儿园的自荐信
2013/11/20 职场文书
会计电算化专业个人的自我评价
2013/11/24 职场文书
化妆品促销方案
2014/02/24 职场文书
广告宣传策划方案
2014/05/21 职场文书
中国文明网向国旗敬礼活动精彩寄语2014
2014/09/27 职场文书
学校党员干部承诺书
2015/05/04 职场文书
贫困证明怎么写
2015/06/16 职场文书
简单实现一个手持弹幕功能+文字抖动特效
2021/03/31 HTML / CSS
如何用vue实现网页截图你知道吗
2021/11/17 Vue.js