Performance switch / if
Test different ways to do 30 different tasks.
CSS
body{font-family:monospace;}
.fail {background:#faa; color:#000;}
.pass {background:#afa; color:#000;}
JavaScript
"use strict";
var ROUNDS = 100; // How many rounds the test should be run.
var uiBrowser= typeof navigator !== 'undefined';
function detectTimeResolution() {
var ta = [+new Date()], tn, td=[];
while (ta.length < 10) {
do {
tn = + new Date();
} while(tn === ta[ta.length-1]);
ta.push(tn);
}
var sum =0;
for (var idx = 1; idx< ta.length; ++idx) {
sum += ta[idx]- ta[idx-1];
}
return sum / (ta.length-1);
}
var resolution = detectTimeResolution();
console.log('Time resolution: ', resolution);
//Make data
var data=(function () {
var data=[], idx;
for (idx=0; idx < 10000; ++idx) {
data.push(Math.random() * 30000 | 0);
}
return data;
})();
// Array of tests
// ["nameOfTest",function test(){}]
var tests=[
[
"if-immediate",
function() {
var idx=ROUNDS, val, temp, didx, dlen;
while(idx--) {
temp = 0;
for (didx=0, dlen = data.length; didx < dlen; ++didx) {
val = data[didx];
if (val < 1000) { temp+= 0 + val; } else
if (val < 2000) { temp+= 1 + val; } else
if (val < 3000) { temp+= 2 + val; } else
if (val < 4000) { temp+= 3 + val; } else
if (val < 5000) { temp+= 4 + val; } else
if (val < 6000) { temp+= 5 + val; } else
if (val < 7000) { temp+= 6 + val; } else
if (val < 8000) { temp+= 7 + val; } else
if (val < 9000) { temp+= 8 + val; } else
if (val < 10000) { temp+= 9 + val; } else
if (val < 11000) { temp+= 10 + val; } else
if (val < 12000) { temp+= 11 + val; } else
if (val < 13000) { temp+= 12 + val; } else
if (val < 14000) { temp+= 13 + val; } else
if (val < 15000) { temp+= 14 + val; } else
if (val < 16000) { temp+= 15 + val; } else
if (val < 17000) { temp+= 16 + val; } else
if (val < 18000) { temp+= 17 + val; } else
if (val < 19000) { temp+= 18 + val; } else
if (val < 20000) {...