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 相关文章推荐
点击文章内容处弹出页面代码
Oct 01 Javascript
JavaScript 加号(+)运算符号
Dec 06 Javascript
jQuery拖动图片删除示例
May 10 Javascript
使用jQuery判断IE浏览器版本的代码
Jun 14 Javascript
基于Bootstrap的后台管理面板 Bootstrap Metro Dashboard
Jun 17 Javascript
封装的dialog插件 基于bootstrap模态对话框的简单扩展
Aug 10 Javascript
AngularJs  Understanding Angular Templates
Sep 02 Javascript
解决URL地址中的中文乱码问题的办法
Feb 10 Javascript
vuex + axios 做登录验证 并且保存登录状态的实例
Sep 16 Javascript
js实现指定时间倒计时效果
Aug 26 Javascript
JavaScript实现放大镜效果代码示例
Apr 29 Javascript
详谈Vue.js框架下main.js,App.vue,page/index.vue之间的区别
Aug 12 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验证码生成类分享
2014/08/21 PHP
php调用淘宝开放API实现根据卖家昵称获取卖家店铺ID的方法
2015/07/29 PHP
PHP常见字符串处理函数用法示例【转换,转义,截取,比较,查找,反转,切割】
2016/12/24 PHP
php生成静态页面并实现预览功能
2019/06/27 PHP
PHP利用curl发送HTTP请求的实例代码
2020/07/09 PHP
鼠标右击事件代码(asp.net后台)
2011/01/27 Javascript
jquery 简短几句代码实现给元素动态添加及获取提示信息
2011/09/01 Javascript
jquery中ajax学习笔记3
2011/10/16 Javascript
用js小类库获取浏览器的高度和宽度信息
2012/01/15 Javascript
jQuery切换网页皮肤并保存到Cookie示例代码
2014/06/16 Javascript
JS原型、原型链深入理解
2016/02/27 Javascript
全面了解构造函数继承关键apply call
2016/07/26 Javascript
jQ处理xml文件和xml字符串的方法(详解)
2016/11/22 Javascript
原生js实现简单的焦点图效果实例
2017/12/14 Javascript
Vue-Cli项目优化操作的实现
2019/10/27 Javascript
浅谈VUE中演示v-for为什么要加key
2020/01/16 Javascript
在vue中使用eslint,配合vscode的操作
2020/11/09 Javascript
[47:04]LGD vs infamous Supermajor小组赛D组 BO3 第二场 6.3
2018/06/04 DOTA
Tornado高并发处理方法实例代码
2018/01/15 Python
使用python实现简单五子棋游戏
2019/06/18 Python
详解如何减少python内存的消耗
2019/08/09 Python
Python跑循环时内存泄露的解决方法
2020/01/13 Python
如何利用Python识别图片中的文字
2020/05/31 Python
python判断是空的实例分享
2020/07/06 Python
CSS3实现淘宝留白的方法
2020/06/05 HTML / CSS
Oroton中国官网:澳洲知名奢侈配饰品牌
2017/03/26 全球购物
美国网上书店:Barnes & Noble
2018/08/15 全球购物
社区端午节活动方案
2014/01/28 职场文书
商学院大学生求职的自我评价
2014/03/12 职场文书
探亲假请假条
2014/04/11 职场文书
物流管理系毕业生求职信
2014/06/03 职场文书
上课睡觉万能检讨书
2015/02/17 职场文书
行政申诉状范文
2015/05/20 职场文书
教师学期述职自我鉴定
2019/08/16 职场文书
Python开发五子棋小游戏
2022/04/28 Python
Django框架中模型的用法
2022/06/10 Python