@aegenet/belt-benchmark
TypeScript icon, indicating that this package has built-in type declarations

1.5.0 • Public • Published

npm version

@aegenet/belt-benchmark

Benchmark your javascript functions Specify the duration, setup the cars functions and start your engine.

💾 Installation

yarn add @aegenet/belt-benchmark@^1.4.0
# or
npm i @aegenet/belt-benchmark@^1.4.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
    },
  });
});

/@aegenet/belt-benchmark/

    Package Sidebar

    Install

    npm i @aegenet/belt-benchmark

    Weekly Downloads

    1

    Version

    1.5.0

    License

    MIT

    Unpacked Size

    93.4 kB

    Total Files

    14

    Last publish

    Collaborators

    • agenet