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 相关文章推荐
window.onresize 多次触发的解决方法
Nov 08 Javascript
js判断undefined类型示例代码
Feb 10 Javascript
javascript实时获取鼠标坐标值并显示的方法
Apr 30 Javascript
浅谈$('div a') 与$('div&gt;a')的区别
Jul 18 Javascript
jquery实现(textarea)placeholder自动换行
Dec 22 Javascript
js+css3实现旋转效果
Jan 20 Javascript
浅谈Vue.js中的v-on(事件处理)
Sep 05 Javascript
vue.js template模板的使用(仿饿了么布局)
Aug 13 Javascript
js实现图片放大并跟随鼠标移动特效
Jan 18 Javascript
JS实现动态无缝轮播
Jan 11 Javascript
js实现网页版贪吃蛇游戏
Feb 22 Javascript
JS+canvas五子棋人机对战实现步骤详解
Jun 04 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
经典的星际争霸,满是回忆的BGM
2020/04/09 星际争霸
安装PHP可能遇到的问题“无法载入mysql扩展” 的解决方法
2007/04/16 PHP
使用PHP强制下载PDF文件示例
2014/01/17 PHP
PHP new static 和 new self详解
2017/02/19 PHP
php pdo操作数据库示例
2017/03/10 PHP
PHP读取并输出XML文件数据的简单实现方法
2017/12/22 PHP
thinkPHP事务操作简单案例分析
2019/10/17 PHP
Javascript 生成指定范围数值随机数
2009/01/09 Javascript
JavaScript 产生不重复的随机数三种实现思路
2012/12/13 Javascript
jQuery列表拖动排列具体实现
2013/11/04 Javascript
jquery常用特效方法使用示例
2014/04/25 Javascript
jQuery使用append在html元素后同时添加多项内容的方法
2015/03/26 Javascript
7个jQuery最佳实践
2016/01/12 Javascript
JavaScript基于对象去除数组重复项的方法
2016/10/09 Javascript
原生JS写Ajax的请求函数功能
2017/12/22 Javascript
深入理解ES6中let和闭包
2018/02/22 Javascript
vue学习笔记之Vue中css动画原理简单示例
2020/02/29 Javascript
Python 字符串中的字符倒转
2008/09/06 Python
Python中的Numpy入门教程
2014/04/26 Python
在Python中进行自动化单元测试的教程
2015/04/15 Python
Python中with及contextlib的用法详解
2017/06/08 Python
基于Python3.6+splinter实现自动抢火车票
2018/09/25 Python
Python中整数的缓存机制讲解
2019/02/16 Python
Jupyter Notebook打开任意文件夹操作
2020/04/14 Python
css3 clip实现圆环进度条的示例代码
2018/02/07 HTML / CSS
巴西食品补充剂在线零售商:Músculos na Web
2017/08/07 全球购物
Sport-Thieme荷兰:购买体育用品
2019/08/25 全球购物
用友笔试题目
2016/10/25 面试题
西安启天科技有限公司网络工程师面试题笔试题
2016/06/12 面试题
上海雨人软件技术开发有限公司测试题
2015/07/14 面试题
大一自我鉴定范文
2013/10/04 职场文书
铁路个人事迹材料
2014/01/30 职场文书
奥巴马当选演讲稿
2014/09/10 职场文书
教师节寄语2015
2015/03/23 职场文书
城南旧事电影观后感
2015/06/16 职场文书
导游词之江西赣州
2019/10/15 职场文书