Duff's device

JavaScript performance comparison

Revision 18 of this test case created by

Preparation code

<script>
  var iterations = 8;
</script>
    

Test runner

Warning! For accurate results, please disable Firebug before running the tests. (Why?)

Java applet disabled.

Testing in CCBot 2.0.0 / Other 0.0.0
Test Ops/sec
Regular Loop
var testVal = 0;
var n = iterations;
while (n--) {
 testVal++;
}
pending…
Duff's Device
var testVal=0 var n=iterations/8 var caseTest=iterations%8 do{switch(caseTest){case 0:testVal++ case 7:testVal++ case 6:testVal++ case 5:testVal++ case 4:testVal++ case 3:testVal++ case 2:testVal++ case 1:testVal++} caseTest=0} while(--n>0) 
pending…
Fast Duff's Device #1
/**
 * Fast Duff's Device
 * @author Jeff Greenberg
 * http://home.earthlink.net/~kendrasg/info/js_opt/jsOptMain.html#fastDuffsdevice
 */
var testVal = 0;
var n = iterations % 8;
while (n--) {
 testVal++;
}

n = parseInt(iterations / 8);
while (n--) {
 testVal++;
 testVal++;
 testVal++;
 testVal++;
 testVal++;
 testVal++;
 testVal++;
 testVal++;
}
pending…
Fast Duff's Device #2
/*
 * Fast Duff's Device
 * @author Miller Medeiros <http://millermedeiros.com> 
 * @version 0.1 (2010/08/25)
 */
var testVal = 0;
var n = iterations % 8;
while (n--) {
 testVal++;
}

n = Math.floor(iterations / 8);
while (n--) {
 testVal++;
 testVal++;
 testVal++;
 testVal++;
 testVal++;
 testVal++;
 testVal++;
 testVal++;
}
pending…
Fast Duff's Device #3
/*
 * Fast Duff's Device
 * @author Miller Medeiros <http://millermedeiros.com> 
 * @version 0.2 (2010/08/25)
 */
var testVal = 0;
var n = iterations % 8;
while (n--) {
 testVal++;
}

n = (iterations / 8) ^ 0; //`value ^ 0` is the same as `Math.floor` for positive numbers and `Math.ceil` for negative numbers
while (n--) {
 testVal++;
 testVal++;
 testVal++;
 testVal++;
 testVal++;
 testVal++;
 testVal++;
 testVal++;
}
pending…
Fast Duff's Device #4
/*
 * Fast Duff's Device
 * @author Miller Medeiros <http://millermedeiros.com> 
 * @version 0.3 (2010/08/25)
 */
var testVal = 0;
var n = iterations % 8;
while (n--) {
 testVal++;
}

n = (iterations * 0.125) ^ 0; //multiplication is faster than division in some cases
while (n--) {
 testVal++;
 testVal++;
 testVal++;
 testVal++;
 testVal++;
 testVal++;
 testVal++;
 testVal++;
}
pending…

Compare results of other browsers

Revisions

You can edit these tests or add even more tests to this page by appending /edit to the URL.

0 Comments