/* * This is a test to check the performance of different Duff's device and normal loop */ var myArray = new Array(1000033); var myArray1 = new Array(1000033); var myArray2 = new Array(1000033);
// Jeff Greenberg's implementation of Duff's device function jeffDuff(){ var iterations = Math.ceil(myArray.length / 8), startAt = myArray.length % 8, i = 0;
do { switch(startAt){ case 0: myArray[i++] = i; case 7: myArray[i++] = i; case 6: myArray[i++] = i; case 5: myArray[i++] = i; case 4: myArray[i++] = i; case 3: myArray[i++] = i; case 2: myArray[i++] = i; case 1: myArray[i++] = i; } startAt = 0; } while (--iterations > 0); }
// Andrew B. King's implementation of Duff's device function kingDuff(){ var iterations = Math.floor(myArray1.length / 8), leftover = myArray1.length % 8, i = 0;
if (leftover > 0){ do { myArray1[i++] = i; } while (--leftover > 0); }