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 相关文章推荐
js操作模态窗口及父子窗口间相互传值示例
Jun 09 Javascript
正则表达式优化JSON字符串的技巧
Dec 24 Javascript
jQuery简单实现title提示效果示例
Aug 01 Javascript
AngularJS中update两次出现$promise属性无法识别的解决方法
Jan 05 Javascript
html中通过JS获取JSON数据并加载的方法
Nov 30 Javascript
完美解决mui框架off-canvas侧滑超出部分隐藏无法滚动的问题
Jan 25 Javascript
微信小程序实现商品属性联动选择
Feb 15 Javascript
使用Webpack提升Vue.js应用程序的4种方法(翻译)
Oct 09 Javascript
JavaScript数值类型知识汇总
Nov 17 Javascript
Vue实现多标签选择器
Nov 28 Javascript
浅谈JavaScript窗体Window.ShowModalDialog使用
Jul 22 Javascript
JavaScript前端开发时数值运算的小技巧
Jul 28 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
利用Memcached在php下实现session机制 替换PHP的原生session支持
2010/08/21 PHP
php实现文件下载更能介绍
2012/11/23 PHP
PHP以指定字段为索引返回数据库所取的数据数组
2013/06/30 PHP
php实现倒计时效果
2015/12/19 PHP
Yii2实现同时搜索多个字段的方法
2016/08/10 PHP
JS Date函数整理方便使用
2013/10/23 Javascript
js继承call()和apply()方法总结
2014/12/08 Javascript
AngularJS基础知识笔记之过滤器
2015/05/10 Javascript
IE浏览器下PNG相关功能
2015/07/05 Javascript
JavaScript判断IE版本型号
2015/07/27 Javascript
使用NodeJs 开发微信公众号(三)微信事件交互实例
2016/03/02 NodeJs
JS脚本实现动态给标签控件添加事件的方法
2016/06/02 Javascript
JS HTML5实现拖拽移动列表效果
2020/08/27 Javascript
Easyui在treegrid添加控件的实现方法
2017/06/23 Javascript
Easyui Datagrid自定义按钮列(最后面的操作列)
2017/07/13 Javascript
input 标签实现输入框带提示文字效果(两种方法)
2017/10/09 Javascript
解决Idea、WebStorm下使用Vue cli脚手架项目无法使用Webpack别名的问题
2019/10/11 Javascript
JavaScript常用工具函数库汇总
2020/09/17 Javascript
全网小程序接口请求封装实例代码
2020/11/06 Javascript
JavaScript仿京东轮播图效果
2021/02/25 Javascript
[00:44]2016完美“圣”典 风云人物:Mikasa宣传片
2016/12/07 DOTA
Python使用Selenium模块模拟浏览器抓取斗鱼直播间信息示例
2018/07/18 Python
django+echart绘制曲线图的方法示例
2018/11/26 Python
使用matplotlib中scatter方法画散点图
2019/03/19 Python
keras 两种训练模型方式详解fit和fit_generator(节省内存)
2020/07/03 Python
如何利用python检测图片是否包含二维码
2020/10/15 Python
日本运动品牌美津浓官方购物网站:MIZUNO SHOP
2016/08/21 全球购物
美国时装品牌:Nautica(诺帝卡)
2016/08/28 全球购物
马来西亚航空官方网站:Malaysia Airlines
2017/07/28 全球购物
比利时买床:Beter Bed
2017/12/06 全球购物
翻译专业应届生求职信
2013/11/23 职场文书
《金钱的魔力》教学反思
2014/02/24 职场文书
2015年度企业工作总结
2015/05/21 职场文书
大卫科波菲尔读书笔记
2015/06/30 职场文书
python爬虫--selenium模块
2021/03/31 Python
十大动画制作软件,Adobe产品上榜两款,第一是行业标准软件
2022/03/18 杂记