2.0.0 • Published 3 years ago

teeny-perf v2.0.0

Weekly downloads
76
License
MIT
Repository
github
Last release
3 years ago

teeny-perf

npm David David GitHub Workflow Status

Performance and benchmarking utilities for Node

Table of Content

Installation

> cd your-project
> npm install teeny-perf

API

Benchmark

Benchmark is a class that provides a simple benchmarking tool for node, relying on the original benchmark module that use to power the now-defunct jsPerf website, and heavily inspired by the great benny.

Constructor

The constructor requires a string: the name for the benchmark suite. It also takes an optional second argument: an object defining if the test should be verbose (default) or not.

To make a test silent, instantiate a benchmark suite as follows:

const { Benchmark } = require("teeny-js-utilities");
const bench = new Benchmark("My test suite", { verbose: false });

Methods

add(name, function)

Adds a test to the suite.

ArgumentTypeDefaultDescription
namestringthe name of the test
functionFunctionThe function to run

async run() => {results}

Runs the Benchmark suite.

Examples

const { Benchmark } = require("teeny-js-utilities");
const bench = new Benchmark("My test suite");

bench.add("Regex", () => {
  /o/.test("Hello World!");
});
bench.add("IndexOf", () => {
  "Hello World!".indexOf("o") > -1;
});
// if setup is required, the test should be wrapped
bench.add("Cached Regex", () => {
  // Some setup:
  const re = /o/;
  // Benchmarked code wrapped in a function:
  return () => re.test("Hello World!");
});

const results = bench.run();

/**
 * Because the test suite is verbose by default, it would
 * print something like:
 *
 * ┌──────────────┬─────────────┬────────────────┬─────────────────┬─────────┐
 * │ Name         │     Ops/sec │ Percent slower │ Margin of error │    Rank │
 * ├──────────────┼─────────────┼────────────────┼─────────────────┼─────────┤
 * │ Regex        │  49,106,105 │         94.65% │          ±1.16% │ Slowest │
 * ├──────────────┼─────────────┼────────────────┼─────────────────┼─────────┤
 * │ IndexOf      │ 917,842,104 │             0% │          ±1.26% │ Fastest │
 * ├──────────────┼─────────────┼────────────────┼─────────────────┼─────────┤
 * │ Cached Regex │  56,337,056 │         93.86% │          ±1.16% │         │
 * └──────────────┴─────────────┴────────────────┴─────────────────┴─────────┘
 *
 */

HighResTimer

HighResTimer is a class that provides a high-resolution timer based on process.hrtime.bigint() and a nodejs polyfill for window.requestAnimationFrame().

Constructor

The constructor requires a number: the time in milliseconds for the timer to run.

Methods

MethodDescription
startStart the timer
cancelCancel the timer before its time is due

Events

NameDescription
EVENT_CANCELEvent sent when the timer is cancelled
EVENT_COMPLETEEvent sent when the timer has terminated
EVENT_STARTEvent sent when the timer starts
EVENT_TICKEvent sent at each process.tick

Examples

const {
  HighResTimer,
  EVENT_START,
  EVENT_TICK,
  EVENT_COMPLETE,
} = require("teeny-perf");

const timer = new HighResTimer(250);
timer
  .on(EVENT_START, () => {
    console.log("-> Timer has started");
  })
  .on(EVENT_TICK, () => {
    console.log("-> tick...");
  })
  .on(EVENT_COMPLETE, () => {
    console.log("-> Timer is done!");
  })
  .start();

Performance

Performance is a wrapper around nodejs Performance measurement APIs.

It provides a highly simplified class for an extremely simple case:

  • start performance monitoring
  • do something that takes a while
  • stop performance monitoring
  • read how much time passed between start and stop (in milliseconds)
  • rinse and repeat

Methods

MethodDescription
startStarts measuring performance
stopStops measuring performance and store the result
GetterTypeDescription
resultsObject
results.durationNumberTime in milliseconds

Examples

Basic performance gathering
const { Performance } = require("teeny-js-utilities");
const perf = new Performance();

// somewhere in your code, you want to start measuring performance:
perf.start();
// do long lasting actions
(...)
// when done, tell performance to stop:
perf.stop();
// the duration can now be found in the Performance class getter `results`:
console.log(`It took ${perf.results.duration} milliseconds to run...`);
Multiple performance gatherings
const { Performance } = require("teeny-js-utilities");
const perf = new Performance();

// somewhere in your code, you want to start measuring performance:
perf.start();
// do long lasting actions
(...)
// when done, tell performance to stop:
perf.stop();
// Save the results
const res1 = perf.results.duration;

// further down in your code, start measuring another performance:
perf.start();
// do other long lasting actions
(...)
// when done, tell performance to stop:
perf.stop();
// Save the results
const res2 = perf.results.duration;

// -> res1 and res2 will have 2 different duration results.

License

MIT © Arno Versini