Skip to content

Latest commit

 

History

History

bench

@thi.ng/bench

npm version npm downloads Twitter Follow

This project is part of the @thi.ng/umbrella monorepo.

About

Benchmarking utilities w/ optional statistics.

Status

STABLE - used in production

Breaking changes

Though no public API change, since v2.0.0 this library internally uses ES BigInt timestamps (in Node via process.hrtime.bigint()). See caniuse for browser support.

Installation

yarn add @thi.ng/bench

Dependencies

None

Usage examples

Several demos in this repo's /examples directory are using this package.

A selection:

shader-ast-workers

screenshot

Live demo | Source

API

Generated API docs

import { timed, bench, benchmark } from "@thi.ng/bench";

// test functions
const fib = (n) => n > 2 ? fib(n - 1) + fib(n - 2) : n > 0 ? 1 : 0;

const fib2 = (n) => {
    const res = [0, 1];
    for(let i = 2; i <= n; i++) {
        res[i] = res[i - 1] + res[i - 2];
    }
    return res[n];
};

// measure single execution time
timed(() => fib(40));
// 714ms
// 102334155
timed(() => fib2(40));
// 0ms
// 102334155

// measure 1mil iterations (default)
bench(() => fib(10), 1e6);
// 395ms
// 55

bench(() => fib2(10), 1e6);
// 53ms
// 55

Benchmarking with statistics

The benchmark() function executes a number of warmup runs, before executing the main measurement and producing a number of useful statistics: mean, median, min/max, 1st/3rd quartile, standard deviation (as percentage)...

See api.ts for configuration options.

benchmark(() => fib(40), { title: "fib", iter: 10, warmup: 5 });
// benchmarking: fib
//         warmup... 3707.17ms (5 runs)
//         executing...
//         total: 7333.72ms, runs: 10
//         mean: 733.37ms, median: 733.79ms, range: [728.58..743.43]
//         q1: 730.98ms, q3: 735.03ms
//         sd: 0.54%

// also returns results:
// {
//   iter: 10,
//   total: 7333.72402,
//   mean: 733.372402,
//   median: 733.794194,
//   min: 728.5808,
//   max: 743.432538,
//   q1: 730.980115,
//   q3: 735.025314,
//   sd: 0.542200865574415
// }

Authors

Karsten Schmidt

License

© 2018 - 2019 Karsten Schmidt // Apache Software License 2.0