create by Tom Duff, first used in C;first used in JS by Jeff Greenberg
基本概念:通过迭代的次数是否为8的倍数讲一个循环展开为一系列的语句
//credit: Jeff Greeberg for JS implementation of Duff's Device
//假设value.length>0
var iterations=Math.ceil(values.length/8);
var startAt=values.length%8;
var i=0;
do{
switch(startAt){
case 0:process(values[i++]);
case 7:process(values[i++]);
case 6:process(values[i++]);
case 5:process(values[i++]);
case 4:process(values[i++]);
case 3:process(values[i++]);
case 2:process(values[i++]);
case 1:process(values[i++]);
}
startAt=0;
}while(--iterations>0)
改进版
//credit: Speed Up Your Site(New Riders,2013)
var iterations=Math.floor(values.length/8);
var leftover=values.length%8;
var i=0;
if(leftover>0){
do{
process(values[i++])
}while(--leftover>0)
}
do{
process(values[i++]);
process(values[i++]);
process(values[i++]);
process(values[i++]);
process(values[i++]);
process(values[i++]);
process(values[i++]);
process(values[i++]);
}while(--iterations>0)