@aegenet/belt-benchmark
v2.3.0
Published
Benchmark your javascript functions
Downloads
71
Readme
@aegenet/belt-benchmark
Benchmark your javascript functions Specify the duration, setup the cars functions and start your engine.
💾 Installation
yarn add @aegenet/belt-benchmark@^2.0.0
# or
npm i @aegenet/belt-benchmark@^2.0.0
Browser
Warning! The accuracy of the browsers is not good at all, so we have to provide large samples per lap.
By default, for browsers, we try to have 4ms per lap.
For Firefox, we encourage you to set this value to 400ms via
{ accuracy: { unit: 'ms', value: 400 }
.
Bench a function
import { Racetrack } from '@aegenet/belt-benchmark';
const racetrack = new Racetrack({
duration: 5000, // 5 seconds
});
let i = 0;
const stats = await racetrack.race({
spec: ctx => {
i++;
},
});
console.table(stats.map(f => f.humanize()));
Bench WAR
import { Racetrack } from '@aegenet/belt-benchmark';
const samples = [8, 3, 4, 1, 0, 5, 2, 6, 9, 7];
const racetrack = new Racetrack({
duration: 15000, // 15 seconds
});
const stats = await racetrack.race(
{
name: 'for i',
spec: (ctx: ILapContext<number>) => {
let count = ctx.value || 0;
for (let i = 0; i < samples.length; i++) {
count += samples[i];
}
return count;
},
},
{
name: 'for of',
spec: (ctx: ILapContext<number>) => {
let count = ctx.value || 0;
for (const val of samples) {
count += val;
}
return count;
},
},
{
name: 'forEach',
spec: (ctx: ILapContext<number>) => {
let count = ctx.value || 0;
samples.forEach(val => {
count += val;
});
return count;
},
}
);
console.table(stats.map(f => f.humanize()));
Node.js
Bench a function
import { NodeRacetrack } from '@aegenet/belt-benchmark';
const racetrack = new NodeRacetrack({
duration: 5000
});
let i = 0;
const stats = await racetrack.race({
spec: ctx => {
i++;
},
});
console.table(stats.map(f => f.humanize()));
Bench WAR
import { NodeRacetrack } from '@aegenet/belt-benchmark';
const samples = [8, 3, 4, 1, 0, 5, 2, 6, 9, 7];
const racetrack = new NodeRacetrack({
duration: 5000,
});
const stats = await racetrack.race(
{
name: 'for i',
spec: (ctx: ILapContext<number>) => {
let count = ctx.value || 0;
for (let i = 0; i < samples.length; i++) {
count += samples[i];
}
return count;
},
},
{
name: 'for of',
spec: (ctx: ILapContext<number>) => {
let count = ctx.value || 0;
for (const val of samples) {
count += val;
}
return count;
},
},
{
name: 'forEach',
spec: (ctx: ILapContext<number>) => {
let count = ctx.value || 0;
samples.forEach(val => {
count += val;
});
return count;
},
}
);
console.table(stats.map(f => f.humanize()));
Reporters
Console output
import { NodeRacetrack } from '@aegenet/belt-benchmark';
import { consoleOutput } from '@aegenet/belt-benchmark/reporter';
const racetrack = new NodeRacetrack({
name: 'The destiny',
duration: 6000,
});
await consoleOutput(async () => {
return await racetrack.race({
spec: ctx => {
// Something
},
});
});
Markdown / HTML
import { NodeRacetrack } from '@aegenet/belt-benchmark';
import { createMarkdown } from '@aegenet/belt-benchmark/reporter';
const racetrack = new NodeRacetrack({
name: 'The destiny',
duration: 6000,
});
await createMarkdown({ fileName: 'out.html' /* 'out.md' */ }, async () => {
return await racetrack.race({
spec: () => {
// Something
},
});
});
JSON
import { NodeRacetrack } from '@aegenet/belt-benchmark';
import { createMarkdown } from '@aegenet/belt-benchmark/reporter';
const racetrack = new NodeRacetrack({
name: 'The destiny',
duration: 6000,
});
await createJSON('out.json', async () => {
return await racetrack.race({
spec: () => {
// Something
},
});
});