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 相关文章推荐
基于datagrid框架的查询
Apr 08 Javascript
不用一句js代码初始化组件
Jan 27 Javascript
Bootstrap滚动监听(Scrollspy)插件详解
Apr 26 Javascript
js操作XML文件的实现方法兼容IE与FireFox
Jun 25 Javascript
jQuery中slidedown与slideup方法用法示例
Sep 16 Javascript
jQuery在header中设置请求信息的方法
Mar 06 Javascript
ES6正则表达式的一些新功能总结
May 09 Javascript
AngularJs实现聊天列表实时刷新功能
Jun 15 Javascript
微信小程序商品详情页规格属性选择示例代码
Oct 30 Javascript
vue2.0+vue-dplayer实现hls播放的示例
Mar 02 Javascript
Web安全之XSS攻击与防御小结
Dec 13 Javascript
解决前后端分离 vue+springboot 跨域 session+cookie失效问题
May 13 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 JSON 数据解析代码
2010/05/26 PHP
解析如何修改phpmyadmin中的默认登陆超时时间
2013/06/25 PHP
PHP闭包实例解析
2014/09/08 PHP
php定义参数数量可变的函数用法实例
2015/03/16 PHP
PHP的mysqli_rollback()函数讲解
2019/01/23 PHP
响应鼠标变换表格背景或者颜色的代码
2009/03/30 Javascript
拉动滚动条加载数据的jquery代码
2012/05/03 Javascript
jquery实现智能感知连接外网搜索
2013/05/21 Javascript
js向上无缝滚动,网站公告效果 具体代码
2013/11/18 Javascript
JavaScript获取function所有参数名的方法
2015/10/30 Javascript
jquery实现点击弹出可放大居中及关闭的对话框(附demo源码下载)
2016/05/10 Javascript
AngularJs学习第五篇从Controller控制器谈谈$scope作用域
2016/06/08 Javascript
Bootstrap和Java分页实例第二篇
2016/12/23 Javascript
JavaScript BASE64算法实现(完美解决中文乱码)
2017/01/10 Javascript
总结几道关于Node.js的面试问题
2017/01/11 Javascript
js 数据存储和DOM编程
2017/02/09 Javascript
Mui使用jquery并且使用点击跳转新窗口的实例
2017/08/19 jQuery
JavaScript正则表达式和级联效果
2017/09/14 Javascript
vue webuploader 文件上传组件开发
2017/09/23 Javascript
浅谈express.js框架中间件(middleware)
2019/04/07 Javascript
[01:37]DOTA2超级联赛专访ChuaN 传奇般的电竞之路
2013/06/19 DOTA
python实现socket客户端和服务端简单示例
2014/02/24 Python
python去掉字符串中重复字符的方法
2014/02/27 Python
Python利用operator模块实现对象的多级排序详解
2017/05/09 Python
Python决策树分类算法学习
2017/12/22 Python
Python读取Word(.docx)正文信息的方法
2018/03/15 Python
对Python 3.5拼接列表的新语法详解
2018/11/08 Python
Python进度条的制作代码实例
2019/08/31 Python
使用Python给头像戴上圣诞帽的图像操作过程解析
2019/09/20 Python
利用 CSS3 实现的无缝轮播功能代码
2017/09/25 HTML / CSS
伦敦哈德森鞋:Hudson Shoes
2018/02/06 全球购物
澳大利亚在线消费电子产品商店:TobyDeals
2020/01/05 全球购物
请介绍一下Ant
2016/07/22 面试题
奥巴马经典演讲稿
2014/09/13 职场文书
电子商务实训报告总结
2014/11/05 职场文书
2016年师德师风学习心得体会
2016/01/12 职场文书