摘自:《javascript 高级程序设计》第三版。在数据量很大的时候,为for循环提速。。。
原来的写法:for(var i=0;i<arr.length;i++){
process(i); //循环体处理
}
原duff装置技术写法: // 因为是改写成的是do while形式(do while循环中循环体至少执行一个回合),所以循环必须满足的前提条件 :执行次数大于0次
原来的写法:for(var i=0;i<arr.length;i++){
process(i); //循环体处理
}
原duff装置技术写法: // 因为是改写成的是do while形式(do while循环中循环体至少执行一个回合),所以循环必须满足的前提条件 :执行次数大于0次
var times= Math.ceil(arr.length/8);
var starAt= arr.length/8;
var i=0;
do{
switch(starAt ){
case 0: process(arr[i++]);
case 7: process(arr[i++]);
case 6: process(arr[i++]);
case 5: process(arr[i++]);
case 4: process(arr[i++]);
case 3: process(arr[i++]);
case 2: process(arr[i++]);
case 1: process(arr[i++]);
}
startAt=0;
} while(--times >0);
改进后的duff装置技术写法: // 因为是改写成的是do while形式,所以循环必须满足的前提条件:执行次数大于等于8次
var times= Math.floor(arr.length/8);
var leftover= arr.length/8;
var i=0;
//结构1
if(leftover>0){
do{
process(arr[i++]);
}while(--leftover>0);
}
//结构1完
//结构2
do{
process(arr[i++]);
process(arr[i++]);
process(arr[i++]);
process(arr[i++]);
process(arr[i++]);
process(arr[i++]);
process(arr[i++]);
process(arr[i++]);
} while(--times >0);
//结构2
据说改进后的技术速度提高4层。比起原来for循环体的速度快多少,很多很多吧,数据量越大,越会体现它的速度。。
快是因为循环判断(i<arr.length)累计时间是循环主要消耗时间的地方,而duff 的写法则将循环展开,判断次数降低。(个人意见)
var starAt= arr.length/8;
var i=0;
do{
switch(starAt ){
case 0: process(arr[i++]);
case 7: process(arr[i++]);
case 6: process(arr[i++]);
case 5: process(arr[i++]);
case 4: process(arr[i++]);
case 3: process(arr[i++]);
case 2: process(arr[i++]);
case 1: process(arr[i++]);
}
startAt=0;
} while(--times >0);
改进后的duff装置技术写法: // 因为是改写成的是do while形式,所以循环必须满足的前提条件:执行次数大于等于8次
var times= Math.floor(arr.length/8);
var leftover= arr.length/8;
var i=0;
//结构1
if(leftover>0){
do{
process(arr[i++]);
}while(--leftover>0);
}
//结构1完
//结构2
do{
process(arr[i++]);
process(arr[i++]);
process(arr[i++]);
process(arr[i++]);
process(arr[i++]);
process(arr[i++]);
process(arr[i++]);
process(arr[i++]);
} while(--times >0);
//结构2
据说改进后的技术速度提高4层。比起原来for循环体的速度快多少,很多很多吧,数据量越大,越会体现它的速度。。
快是因为循环判断(i<arr.length)累计时间是循环主要消耗时间的地方,而duff 的写法则将循环展开,判断次数降低。(个人意见)
上面代码采用javascript语法,其他语言做相应修改。