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下组织javascript代码(js函数化)
Aug 25 Javascript
JavaScript中window、doucment、body的解释
Aug 14 Javascript
jQuery中bind与live的用法及区别小结
Jan 27 Javascript
javascript对JSON数据排序的3个例子
Apr 12 Javascript
深入浅析JavaScript中的scrollTop
Jul 11 Javascript
Google Maps基础及实例解析
Aug 06 Javascript
探讨AngularJs中ui.route的简单应用
Nov 16 Javascript
Angular 4依赖注入学习教程之组件服务注入(二)
Jun 04 Javascript
vue中Axios的封装与API接口的管理详解
Aug 09 Javascript
浅谈webpack性能榨汁机(打包速度优化)
Jan 09 Javascript
原生js实现点击轮播切换图片
Feb 11 Javascript
vue项目打包为APP,静态资源正常显示,但API请求不到数据的操作
Sep 12 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 中使用随机数的三个步骤
2006/10/09 PHP
信用卡效验程序
2006/10/09 PHP
PHP连接access数据库
2008/03/27 PHP
php空间不支持socket但支持curl时recaptcha的用法
2011/11/07 PHP
ThinkPHP3.1新特性之动态设置自动完成和自动验证示例
2014/06/19 PHP
PHP实现根据设备类型自动跳转相应页面的方法
2014/07/24 PHP
PHP创建文件及写入数据(覆盖写入,追加写入)的方法详解
2019/02/15 PHP
PHP时间类完整代码实例
2021/02/26 PHP
用JAVASCRIPT如何给&amp;lt;textarea&amp;gt;&amp;lt;/textarea&amp;gt;赋值
2007/04/20 Javascript
在JavaScript中获取请求的URL参数
2010/12/22 Javascript
Document:getElementsByName()使用方法及示例
2013/10/28 Javascript
JS动态添加与删除select中的Option对象(示例代码)
2013/12/20 Javascript
5个可以帮你理解JavaScript核心闭包和作用域的小例子
2014/10/08 Javascript
JavaScript Length 属性的总结
2015/11/02 Javascript
浅析JS中的 map, filter, some, every, forEach, for in, for of 用法总结
2017/03/29 Javascript
Angular 2.x学习教程之结构指令详解
2017/05/25 Javascript
Angular 2 ngForm中的ngModel、[ngModel]和[(ngModel)]的写法
2017/06/29 Javascript
Vue学习笔记之表单输入控件绑定
2017/09/05 Javascript
js动态引入的四种方法
2018/05/05 Javascript
vue.js使用v-model指令实现的数据双向绑定功能示例
2018/05/22 Javascript
vue页面切换过渡transition效果
2018/10/08 Javascript
jquery+ajax实现上传图片并显示上传进度功能【附php后台接收】
2019/06/06 jQuery
jQuery实现简易聊天框
2020/02/08 jQuery
Django中处理出错页面的方法
2015/07/15 Python
用python代码将tiff图片存储到jpg的方法
2018/12/04 Python
Python http接口自动化测试框架实现方法示例
2018/12/06 Python
使用Pandas将inf, nan转化成特定的值
2019/12/19 Python
如何使用PyCharm引入需要使用的包的方法
2020/09/22 Python
小组口号大全
2014/06/09 职场文书
班级课外活动总结
2014/07/09 职场文书
三方股份合作协议书
2014/10/13 职场文书
中秋节寄语2015
2015/03/24 职场文书
原告代理词范文
2015/05/25 职场文书
2015少先队大队辅导员工作总结
2015/07/24 职场文书
演讲开头怎么书写?
2019/08/06 职场文书
SQL CASE 表达式的具体使用
2022/03/21 SQL Server