0.0.8 • Published 1 year ago

isitfast v0.0.8

Weekly downloads
-
License
MIT
Repository
github
Last release
1 year ago

Isitfast

A modular benchmarking library with V8 warmup and CPU/RAM denoising for the most accurate and consistent results.

You no longer have to ask yourself, "Is it fast?" Just benchmark it!

Key Features

  • Waits until V8 optimizations kick in and benchmarks become less noisy.
  • Eliminates performance noise caused by benchmark wrapper functions.
  • Reuses a couple of UInt32Arrays to store stats for reduced memory noise.
  • Runs GC before every benchmark and suite for reduced memory noise.
  • Uses high-resolution time in nanoseconds for more accurate CPU results.
  • Exposes lifecycle events for real-time data monitoring.
  • Prints colorful benchmark results in the terminal (verbose/compact).
  • Allows combining different output strategies (terminal/markdown/etc.).

Installation

To install, run the following command in your terminal:

yarn add isitfast

How to run

It is recommended to run isitfast with the --expose-gc Node flag to enable the library to run GC and collect more statistically correct memory data.

When used in a TypeScript environment, you can run it like this: node --expose-gc -r ts-node/register benchmarks/benchmarkName.ts.

For the most accurate results, it is recommended to run benchmark suites in different JS realms by putting them in separate files and executing them individually.

Example

import { suite, useTerminal } from "isitfast";

// define your suite with benchmarks
const testBenchmark = suite("Test")
  .add("emptyAsync", async () => {})
  .add("emptySync", () => {});

(async () => {
  // collect data and print them into a terminal
  useTerminal();

  // run all benchmarks and trigger lifecycle events
  await testBenchmark.run();
})();

API

Suite

You can create a Suite with by calling either suite(name: string, options?: DeepPartial<Options>) or new Suite(name: string, options?: DeepPartial<Options>).

const testOne = suite("Test One", {
  // options
});

const testTwo = new Suite("Test Two", {
  // options
});

These are the default options:

{
  cpu: {
    chunkSize: 100,
    compareSize: 25,
    rangePercent: 1,
  },
  ram: {
    chunkSize: 5,
    compareSize: 5,
    rangePercent: 1,
  },
  offset: {
    allow: true,
    rangePercent: 1,
  },
  gc: {
    allow: true,
  }
}

Modes

useTerminal

Listens to events and prints verbose suite and benchmark results into a terminal.

// subscribe to events
useTerminal();

// run suite which publishes data to the events
await runBenchmarks.run();

useTerminalCompact

Listens to events and prints compact suite and benchmark results into a terminal.

// subscribe to events
useTerminalCompact();

// run suite which publishes data to the events
await runBenchmarks.run();

Events

The Suite by itself doesn't return any data. For consuming suite and benchmarks data you should listen to events. All events are prefixed with $.

Behind the scenes isitfast uses μEve to create, subscribe to and publish into events.

You can easily import sub/clr/has event functions from isitfast. They're just re-exported functions from μEve.

  • $suiteBefore Before suite gets run
  • $suiteOffsets After suite offsets get calculated
  • $suiteAfter After suite gets run
  • $benchmarkBeforeAll Before benchmark of one type gets run
  • $benchmarkBeforeEach Before each benchmark of one type gets run
  • $benchmarkAfterEach After each benchmark of one type gets run
  • $benchmarkAfterAll After benchmark of one type gets run
0.0.8

1 year ago

0.0.7

1 year ago

0.0.6

1 year ago

0.0.5

1 year ago

0.0.4

1 year ago

0.0.3

1 year ago

0.0.2

1 year ago

0.0.1

1 year ago