作者fillano (冒牌费大公)
看板Ajax
标题[问题] 程式执行效率的问题
时间Thu Dec 9 14:31:27 2010
我写了一小段javascript来测试简单的回圈及比较复杂的递回两种作法的效率,
却发现递回的执行速度比较快,我自己看不太出来原因,不知道谁可以解释一下
?
程式如下:
var input = [],output=[];
var input1=[],output1=[];
function times(n, f) {
var c=0;
return function() {
var args = [];
for(var i=0,j=arguments.length; i<j; i++) {
args.push(arguments[i]);
}
if(c<n) {
c++;
return f.apply(this, args);
} else {
return null;
}
};
}
var work = function(res) {
return res.shift();
};
var f1 = times(10, work);
var r1 = function(res, f) {
var ret = f(res);
if(null !== ret) {
output.push(ret);
r1(res, f);
}
};
var r2 = function(n) {
for(var i=0; i<n; i++) {
output1.push(work(input1));
}
};
function test1() {
input = [0,1,2,3,4,5,6,7,8,9];
output = [];
r1(input, f1);
}
function test2() {
input1 = [0,1,2,3,4,5,6,7,8,9];
output1 = [];
r2(10);
}
var count = 100000;
var d1 = new Date().getTime();
for(var i=0; i<count; i++) {
test1();
}
var d2 = (new Date().getTime()) - d1;
var d3 = new Date().getTime();
for(var i=0; i<count; i++) {
test2();
}
var d4 = (new Date().getTime()) - d3;
alert(d2);
alert(d4);
在我的Chrome浏览器中跑,test1()速度这样测量平均是test2()的三倍...
IE9差距比较小,执行时间大约是2:3
Opera的差距大概到五倍
但是看起来明明是test1()执行的东西比较复杂才对...
--
Sapere Aude! 这就是启蒙运动的口号!
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 61.62.69.1