首页 新闻 搜索 专区 学院

为什么用《高性能JavaScript》中介绍的Duff's Device减少迭代次数并没有性能提升?

0
悬赏园豆:5 [已解决问题] 解决于 2012-05-14 16:16
var aTest=[];
for(var i=0;i<1000000;i++){
    aTest[i]=i;
}

function process(val){
    return val+1;
}

function useDuffDevice(aTest){
var len=aTest.length,j=len%8,k;
while(j){
    process(aTest[len-(j--)]);
}

j=Math.floor(len/8);
while(j--){
    k=j*8-1;
    process(aTest[k--]);
    process(aTest[k--]);
    process(aTest[k--]);
    process(aTest[k--]);
    process(aTest[k--]);
    process(aTest[k--]);
    process(aTest[k--]);
    process(aTest[k--]);
}
}

function useWhile(aTest){
    var len=aTest.length;
    while(len--){
        process(aTest[len]);
    }
}

function useFor(aTest){
    var len=aTest.length;
    for(var i=0;i<len;i++){
        process(aTest[i]);
    }
}

console.group("useDuffDevice");
var date=new Date();
useDuffDevice(aTest);
var count=(new Date())-date;
console.log(count);
console.groupEnd();


console.group("useWhile");
date=new Date();
useWhile(aTest);
count=(new Date())-date;
console.log(count);
console.groupEnd();

console.group("useFor");
date=new Date();
useFor(aTest);
count=(new Date())-date;
console.log(count);
console.groupEnd();

结果:

没有明显的性能提升啊,是我代码写的有问题吗?

草根程序猿的主页 草根程序猿 | 初学一级 | 园豆:129
提问于:2012-05-14 14:02
< >
分享
最佳答案
1

你的程序我大致看了看,调用程序的时间复杂度都是O(n),在这个时间复杂度下,你使用什么循环并没有关系,时间开销不过是计算机运行性能或运行时性能的一些小区别而已,所以你感觉不出来。

收获园豆:5
无之无 | 大侠五级 |园豆:5085 | 2012-05-14 15:09
其他回答(2)
0

减少迭代次数:肯定是有性能提升的。在别的语言中也会有的。

悟行 | 园豆:12422 (专家六级) | 2012-05-14 14:04

大型程序里才会有比较明显的

支持(0) 反对(0) icepy | 园豆:587 (小虾三级) | 2012-05-14 14:09

@飞舞轻扬在台北: 目前迭代了100w次,不算小吧

支持(0) 反对(0) 草根程序猿 | 园豆:129 (初学一级) | 2012-05-14 14:16

@菜鸟程序猿: 你看了《数据结构和算法》就知道了。

支持(0) 反对(0) 悟行 | 园豆:12422 (专家六级) | 2012-05-14 14:21

@荒野的呼唤: 谢谢回复,原理我是知道的,只是想做个测试验证一下,结果没达到预期的效果

支持(0) 反对(0) 草根程序猿 | 园豆:129 (初学一级) | 2012-05-14 14:32
0

用IE游览器试试,这货的JS运行速度忒慢

paseo | 园豆:262 (菜鸟二级) | 2012-05-14 14:31
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册