在学习js过程中,经常会遇到同样一个功能点 这样实现也可以,那样实现也可以。但是哪个方式最优呢"htmlcode">
/**
* 函数性能比较
* @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:
结果显示 其实性能差不多。
下面是其他同学的补充
快速比较代码执行效率的方法
测试效率可以使用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,函数性能
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件! 如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
《魔兽世界》大逃杀!60人新游玩模式《强袭风暴》3月21日上线
暴雪近日发布了《魔兽世界》10.2.6 更新内容,新游玩模式《强袭风暴》即将于3月21 日在亚服上线,届时玩家将前往阿拉希高地展开一场 60 人大逃杀对战。
艾泽拉斯的冒险者已经征服了艾泽拉斯的大地及遥远的彼岸。他们在对抗世界上最致命的敌人时展现出过人的手腕,并且成功阻止终结宇宙等级的威胁。当他们在为即将于《魔兽世界》资料片《地心之战》中来袭的萨拉塔斯势力做战斗准备时,他们还需要在熟悉的阿拉希高地面对一个全新的敌人──那就是彼此。在《巨龙崛起》10.2.6 更新的《强袭风暴》中,玩家将会进入一个全新的海盗主题大逃杀式限时活动,其中包含极高的风险和史诗级的奖励。
《强袭风暴》不是普通的战场,作为一个独立于主游戏之外的活动,玩家可以用大逃杀的风格来体验《魔兽世界》,不分职业、不分装备(除了你在赛局中捡到的),光是技巧和战略的强弱之分就能决定出谁才是能坚持到最后的赢家。本次活动将会开放单人和双人模式,玩家在加入海盗主题的预赛大厅区域前,可以从强袭风暴角色画面新增好友。游玩游戏将可以累计名望轨迹,《巨龙崛起》和《魔兽世界:巫妖王之怒 经典版》的玩家都可以获得奖励。
