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 相关文章推荐
在Windows上安装Node.js模块的方法
Sep 25 Javascript
js切换div css注意的细节
Dec 10 Javascript
js之事件冒泡和事件捕获详细介绍
Oct 28 Javascript
js opener的使用详解
Jan 11 Javascript
jQuery中的val()示例应用
Feb 26 Javascript
JS制作简单的三级联动
Mar 18 Javascript
jQuery实现带幻灯的tab滑动切换风格菜单代码
Aug 27 Javascript
JS组件Bootstrap ContextMenu右键菜单使用方法
Apr 17 Javascript
jQuery使用中可能被XSS攻击的一些危险环节提醒
May 24 Javascript
表单中单选框添加选项和移除选项
Jul 04 Javascript
vue.js的computed,filter,get,set的用法及区别详解
Mar 08 Javascript
Angular Material Icon使用详解
Nov 07 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
php5编程中的异常处理详细方法介绍
2008/07/29 PHP
Yii数据读取与跳转参数传递用法实例分析
2016/07/12 PHP
JavaScript 继承详解(二)
2009/07/13 Javascript
给Flash加一个超链接(推荐使用透明层)兼容主流浏览器
2013/06/09 Javascript
基于jquery的文章中所有图片width大小批量设置方法
2013/08/01 Javascript
javascript窗口宽高,鼠标位置,滚动高度(详细解析)
2013/11/18 Javascript
jquery修改属性值实例代码(设置属性值)
2014/01/06 Javascript
兼容最新firefox、chrome和IE的javascript图片预览实现代码
2014/08/08 Javascript
jQuery获取页面元素绝对与相对位置的方法
2015/06/10 Javascript
jquery easyui datagrid实现增加,修改,删除方法总结
2016/05/25 Javascript
Vue filter介绍及详细使用
2018/04/04 Javascript
jQuery实现的手动拖动控制进度条效果示例【测试可用】
2018/04/18 jQuery
基于jQuery使用Ajax动态执行模糊查询功能
2018/07/05 jQuery
解决layui中的form表单与button的点击事件冲突问题
2018/08/15 Javascript
Vue实现搜索结果高亮显示关键字
2019/05/28 Javascript
JS将时间秒转换成天小时分钟秒的字符串
2019/07/10 Javascript
ES6中Symbol、Set和Map用法详解
2019/08/20 Javascript
js实现移动端轮播图滑动切换
2020/12/21 Javascript
[02:04]2020年夜魇暗潮预告片
2020/10/30 DOTA
python3中int(整型)的使用教程
2017/03/23 Python
Python温度转换实例分析
2018/01/17 Python
Python3.5以上版本lxml导入etree报错的解决方案
2019/06/26 Python
Python递归及尾递归优化操作实例分析
2020/02/01 Python
Python中的整除和取模实例
2020/06/03 Python
如何用python处理excel表格
2020/06/09 Python
你可能不熟练的十个前端HTML5经典面试题
2018/07/03 HTML / CSS
HTML5安全介绍之内容安全策略(CSP)简介
2012/07/10 HTML / CSS
Boden美国官网:英伦原创时装品牌
2017/07/03 全球购物
英国异国风情旅游网站:Travel Talk Tours(团体旅游、探险旅游、帆船假期)
2018/07/26 全球购物
德国在线购买葡萄酒网站:Geile Weine
2019/09/24 全球购物
俄罗斯香水在线商店:AromaCode
2019/12/04 全球购物
房地产销售大学生自我评价分享
2013/11/11 职场文书
教育基金募捐倡议书
2014/05/14 职场文书
2014初中数学教研组工作总结
2014/12/19 职场文书
2019年新郎保证书3篇
2019/10/17 职场文书
win sever 2022如何占用操作主机角色
2022/06/25 Servers