60 lines
1.1 KiB
JavaScript
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');
|