function microBench(task, iterations) {
if (iterations == null) {
iterations = 10;
}
let lastResult;
const timesAndMem = Array.from({ length: iterations }).map(() => {
const start = performance.now();
const memBefore = performance.memory.usedJSHeapSize;
lastResult = task();
const memAfter = performance.memory.usedJSHeapSize;
return [performance.now() - start, Math.abs(memAfter - memBefore)];
});
const times = timesAndMem.map((x) => x[0]);
const mem = timesAndMem.map((x) => x[1]);
const sumTime = times.reduce((l, r) => l + r, 0);
const avgTime = sumTime / iterations;
const sumMem = mem.reduce((l, r) => l + r, 0);
const avgMem = sumMem / iterations;
return [
Math.min(...times),
Math.max(...times),
avgTime,
Math.min(...mem),
Math.max(...mem),
avgMem,
sampleArray([...lastResult], 10).map((x) => x && x.value)
];
}