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 相关文章推荐
jquery动态加载js/css文件方法(自写小函数)
Oct 11 Javascript
常用DOM整理
Jun 16 Javascript
jQuery插件Validate实现自定义表单验证
Jan 18 Javascript
每日十条JavaScript经验技巧(一)
Jun 23 Javascript
jQuery遍历DOM的父级元素、子级元素和同级元素的方法总结
Jul 07 Javascript
Vue.js 插件开发详解
Mar 29 Javascript
Angularjs中使用指令绑定点击事件的方法
Mar 30 Javascript
Kotlin学习第一步 kotlin语法特性
May 25 Javascript
JS 60秒后重新发送验证码的实例讲解
Jul 26 Javascript
纯js实现页面返回顶部的动画(超简单)
Aug 10 Javascript
基于vue-cli创建的项目的目录结构及说明介绍
Nov 23 Javascript
JavaScript实现英语单词题库
Dec 24 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实现详细解析
2013/08/24 PHP
PHP 开发者该知道的 5 个 Composer 小技巧
2016/02/03 PHP
Zend Framework教程之Zend_Controller_Plugin插件用法详解
2016/03/07 PHP
简单的自定义php模板引擎
2016/08/26 PHP
yii框架redis结合php实现秒杀效果(实例代码)
2017/10/26 PHP
php框架CodeIgniter使用redis的方法分析
2018/04/13 PHP
php支付宝APP支付功能
2020/07/29 PHP
Javascript 变量作用域 两个可能会被忽略的小特性
2010/03/23 Javascript
js获取url中&quot;?&quot;后面的字串方法
2014/05/15 Javascript
使用Plupload实现直接上传附件至七牛云存储
2014/12/26 Javascript
异步JS框架的作用以及实现方法
2015/10/29 Javascript
JavaScript encodeURI 和encodeURIComponent
2015/12/04 Javascript
浏览器复制插件zeroclipboard使用指南
2016/03/26 Javascript
js多功能分页组件layPage使用方法详解
2016/05/19 Javascript
JS中正则表达式只有3种匹配模式(没有单行模式)详解
2016/07/28 Javascript
浅谈通过JS拦截 pushState和replaceState事件
2017/07/21 Javascript
JavaScript中立即执行函数实例详解
2017/11/04 Javascript
ES6 Iterator遍历器原理,应用场景及相关常用知识拓展详解
2020/02/15 Javascript
[02:20]DOTA2亚洲邀请赛 IG战队出场宣传片
2015/02/07 DOTA
在Python程序中进行文件读取和写入操作的教程
2015/04/28 Python
python 文件操作删除某行的实例
2017/09/04 Python
Python自然语言处理之词干,词形与最大匹配算法代码详解
2017/11/16 Python
Python异常的检测和处理方法
2018/10/26 Python
Python字符编码转码之GBK,UTF8互转
2020/02/09 Python
通过python调用adb命令对App进行性能测试方式
2020/04/23 Python
用 python 进行微信好友信息分析
2020/11/28 Python
基于Python-turtle库绘制路飞的草帽骷髅旗、美国队长的盾牌、高达的源码
2021/02/18 Python
浅谈CSS3鼠标移入图片动态提示效果(transform)
2017/11/06 HTML / CSS
移动web模拟客户端实现多方框输入密码效果【附代码】
2016/03/25 HTML / CSS
优衣库美国官网:UNIQLO美国
2018/04/14 全球购物
车间统计员岗位职责
2014/01/05 职场文书
大学迎新晚会主持词
2014/03/24 职场文书
房屋出租委托书格式
2014/09/23 职场文书
上班时间打瞌睡检讨书
2014/09/26 职场文书
2014年幼儿园小班工作总结
2014/12/04 职场文书
关于Javascript闭包与应用的详解
2021/04/22 Javascript