UNPKG

litejs

Version:

Single-page application framework

97 lines (81 loc) 1.74 kB
module.exports = bench bench.cpuSpeed = cpuSpeed function bench(tests, next) { var i, tmp , keys = Object.keys(tests).reverse() , len = keys.length , times = [] , samples = 7 , warmupTime = 0|(2000/len) // warmup for (i = len; i--; ) { measure(tests[keys[i]], warmupTime) times[i] = Array(samples) } i = len runSync() function runSync() { if (i-->0 || samples-->0 && (i = len - 1)) { times[i][samples] = measure(tests[keys[i]], 500) process.nextTick(runSync) } else { respond() } } function respond() { var diff, fastest, i, t , result = {} for (i = len; i--; ) { t = result[keys[i]] = stat(times[i]) if (!fastest || t.ops > fastest) { fastest = t.ops } } for (i = len; t = result[keys[--i]]; ) { diff = Math.round((fastest - t.ops) / fastest * 100) t.rel = diff ? diff + "% slower" : "fastest" } if (typeof next === "function") { next(null, result) } } } function measure(fn, time, next) { var now, i , calls = 0 , end = Date.now() + time , hr = process.hrtime() for (; true; ) { for (i = 1000; i--; ) fn() calls++ if (Date.now() > end) { hr = process.hrtime(hr) return 1000 * calls / (hr[0] + hr[1]/1e9) } } } function stat(arr) { var i, t , mean = 0 , se = 0 , len = arr.length for (i = len; i--; ) { mean += arr[i] } mean /= len for (i = len; i--; ) { t = arr[i] - mean se += t * t } se = ~~(1000 * (Math.sqrt(se / (len - 1)) / Math.sqrt(len)) / mean) / 10 return { ops: mean|0, se: se, text: ((0|mean) + "").replace(/\B(?=(\d{3})+(?!\d))/g, ",") + " ± " + se + "%" } } function cpuSpeed() { for (var i = 1e8, time = Date.now(); i--; ); time = Date.now() - time return Math.round(1850 / time) / 10 }