js-range/bench.js
2025-12-13 10:37:34 -08:00

60 lines
1.1 KiB
JavaScript

import {
rangeGenerator,
rangeObjectProperty,
rangeClosure
} from './range.js';
const thousand = 1000;
const million = 1000000;
function benchmark(func) {
const iters = 100 * thousand;
// pre-heat jit
for (let i = 0; i < iters; i++) {
func();
}
let start = performance.now();
for (let i = 0; i < iters; i++) {
func();
}
let delta = (performance.now() - start) / iters;
console.log(`${delta * thousand} us per loop`);
}
function testFor() {
benchmark(() => {
let acc = 0;
for (let i = 0; i < thousand; i++) {
acc += i;
}
return acc;
});
}
function testOne(func) {
benchmark(() => {
let acc = 0;
for (let i of func(thousand)) {
acc += i;
}
return acc;
});
}
console.log('raw for loop');
testFor();
console.log('\n');
console.log('rangeGenerator');
testOne(rangeGenerator);
console.log('\n');
console.log('rangeObjectProperty');
testOne(rangeObjectProperty);
console.log('\n');
console.log('rangeClosure');
testOne(rangeClosure);
console.log('\n');