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 相关文章推荐
JavaScript 作用域链解析
Nov 13 Javascript
jQuery实现的tab标签切换效果示例
Sep 05 Javascript
js addDqmForPP给标签内属性值加上双引号的函数
Dec 24 Javascript
JS作用域深度解析
Dec 29 Javascript
JavaScript中Hoisting详解 (变量提升与函数声明提升)
Aug 18 Javascript
Node.js静态服务器的实现方法
Feb 28 Javascript
JS如何获取地址栏的参数实例讲解
Oct 06 Javascript
JS实现图片轮播效果实例详解【可自动和手动】
Apr 04 Javascript
layui数据表格重载实现往后台传参
Nov 15 Javascript
Vue.js实现大屏数字滚动翻转效果
Nov 29 Javascript
JS函数参数的传递与同名参数实例分析
Mar 16 Javascript
使用typescript快速开发一个cli的实现示例
Dec 09 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
计算2000年01月01日起到指定日的天数
2006/10/09 PHP
PHP 翻页 实例代码
2009/08/07 PHP
探讨如何在PHP开启gzip页面压缩实例
2013/06/09 PHP
php简单实现sql防注入的方法
2016/04/22 PHP
Laravel中Facade的加载过程与原理详解
2017/09/22 PHP
总结PHP代码规范、流程规范、git规范
2018/06/18 PHP
PHP 扩展Memcached命令用法实例总结
2020/06/04 PHP
理解Javascript_01_理解内存分配原理分析
2010/10/11 Javascript
JS解析json数据并将json字符串转化为数组的实现方法
2012/12/25 Javascript
Javascript基础教程之变量
2015/01/18 Javascript
Javascript实现颜色rgb与16进制转换的方法
2015/04/18 Javascript
基于JavaScript实现点击页面任何位置返回
2016/08/31 Javascript
20行JS代码实现网页刮刮乐效果
2017/06/23 Javascript
js实现简易聊天对话框
2017/08/17 Javascript
Django使用多数据库的方法
2017/09/06 Javascript
基于Vue2x实现响应式自适应轮播组件插件VueSliderShow功能
2018/05/16 Javascript
加快Vue项目的开发速度的方法
2018/12/12 Javascript
vue+Element实现搜索关键字高亮功能
2019/05/28 Javascript
微信小程序图片加载失败时替换为默认图片的方法
2019/12/09 Javascript
JS动态显示倒计时效果
2019/12/12 Javascript
vue路由跳转传递参数的方式总结
2020/05/10 Javascript
[03:17]史诗级大片应援2018DOTA2国际邀请赛 致敬每一位坚守遗迹的勇士
2018/07/20 DOTA
python中遍历文件的3个方法
2014/09/02 Python
python学习之matplotlib绘制散点图实例
2017/12/09 Python
使用PyInstaller将python转成可执行文件exe笔记
2018/05/26 Python
python对象与json相互转换的方法
2019/05/07 Python
Python 类方法和实例方法(@classmethod),静态方法(@staticmethod)原理与用法分析
2019/09/20 Python
什么是python的自省
2020/06/21 Python
matplotlib更改窗口图标的方法示例
2021/02/03 Python
美国专业消费电子及摄影器材网站:B&H Photo Video
2019/12/18 全球购物
出生证明公证书
2014/04/09 职场文书
党的群众路线教育实践活动个人承诺书
2014/05/22 职场文书
小学英语复习计划
2015/01/19 职场文书
考试作弊检讨书范文
2015/01/27 职场文书
企业法人代表证明书
2015/06/18 职场文书
与Windows10相比Windows11有哪些改进?值不值得升级?
2021/11/21 数码科技