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类型系统 Window对象学习笔记
Jan 07 Javascript
url传递的参数值中包含&amp;时,url自动截断问题的解决方法
Aug 02 Javascript
浅析JavaScript函数的调用模式
Aug 10 Javascript
AngularJS入门教程之双向绑定详解
Aug 18 Javascript
js通过keyCode值判断单击键盘上某个键,然后触发指定的事件方法
Feb 19 Javascript
详解vue服务端渲染(SSR)初探
Jun 19 Javascript
Vue写一个简单的倒计时按钮功能
Apr 20 Javascript
微信小程序中插入激励视频广告并获取收益(实例代码)
Dec 06 Javascript
JS实现横向轮播图(初级版)
Jun 24 Javascript
angular中的post请求处理示例详解
Jun 30 Javascript
vue中选中多个选项并且改变选中的样式的实例代码
Sep 16 Javascript
Array.filter中如何正确使用Async
Nov 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
php导出csv格式数据并将数字转换成文本的思路以及代码分享
2014/06/05 PHP
浅谈PHP的反射机制
2016/12/15 PHP
javascript 三种编解码方式
2010/02/01 Javascript
JavaScript面向对象之Prototypes和继承
2012/07/12 Javascript
做好七件事帮你提升jQuery的性能
2014/02/06 Javascript
jquery中的$(document).ready()使用小结
2014/02/14 Javascript
javaScript使用EL表达式的几种方式
2014/05/27 Javascript
基于jquery css3实现点击动画弹出表单源码特效
2015/08/31 Javascript
js代码实现点击按钮出现60秒倒计时
2021/01/28 Javascript
第一篇初识bootstrap
2016/06/21 Javascript
微信小程序 wx:key详细介绍
2016/10/28 Javascript
JavaScript仿微博发布信息案例
2016/11/16 Javascript
浅谈原型对象的常用开发模式
2017/07/22 Javascript
浅谈JS 数字和字符串之间相互转化的纠纷
2017/10/20 Javascript
微信小程序实现星级评分和展示
2018/07/05 Javascript
使用vue根据状态添加列表数据和删除列表数据的实例
2018/09/29 Javascript
NLTK 3.2.4 环境搭建教程
2018/09/19 Python
python 实现UTC时间加减的方法
2018/12/31 Python
Python学习笔记之列表推导式实例分析
2019/08/13 Python
将python2.7添加进64位系统的注册表方式
2019/11/20 Python
django为Form生成的label标签添加class方式
2020/05/20 Python
python装饰器实现对异常代码出现进行自动监控的实现方法
2020/09/15 Python
Django返回HTML文件的实现方法
2020/09/17 Python
10个顶级Python实用库推荐
2021/03/04 Python
详解CSS3中border-image的使用
2015/07/18 HTML / CSS
canvas实现高阶贝塞尔曲线(N阶贝塞尔曲线生成器)
2018/01/10 HTML / CSS
String和StringBuffer的区别
2015/08/13 面试题
写好自荐信需做到的5要点
2014/03/07 职场文书
理想演讲稿范文
2014/05/21 职场文书
发展党员工作情况汇报
2014/10/28 职场文书
乡镇一岗双责责任书
2015/01/29 职场文书
高校自主招生自荐信2015
2015/03/04 职场文书
2015年计生协会工作总结
2015/04/24 职场文书
计划生育责任书
2015/05/09 职场文书
Keras多线程机制与flask多线程冲突的解决方案
2021/05/28 Python
MySQL 计算连续登录天数
2022/05/11 MySQL