2.2.0 • Published 9 months ago

@aegenet/belt-benchmark v2.2.0

Weekly downloads
-
License
MIT
Repository
github
Last release
9 months ago

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

9 months ago

2.1.0

11 months ago

1.6.2

12 months ago

1.7.0

12 months ago

2.0.0

12 months ago

1.5.0

1 year ago

1.4.2

1 year ago

1.4.1

1 year ago

1.4.0

1 year ago

1.3.2

1 year ago

1.3.1

2 years ago

1.3.0

2 years ago

1.2.0

2 years ago