@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
    },
  });
});

Package Sidebar

Install

npm i @aegenet/belt-benchmark

Weekly Downloads

0

Version

1.5.0

License

MIT

Unpacked Size

93.4 kB

Total Files

14

Last publish

Collaborators

  • agenet