npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2025 – Pkg Stats / Ryan Hefner

@marvinh/minibench

v1.1.1

Published

Minimal benchmark library for nodejs

Downloads

11

Readme

minibench

minibench is a tiny benchmarking library inspired by preact's minimal benchmark suite and Google Chrome's v8 performance measurement code. Under the hood it uses the recently introduced performance.now api.

Before any measuring is done, minibench automatically warms up the JIT-cache guaranting stable results. Many other benchmarking don't do this, leading to misleading measurements, where the first one will always be faster than all later measurements.

Installation

# npm
npm install --dev @marvinh/minibench

# yarn
yarn add -D @marvinh/minibench

Usage

import { perf } from "@marvinh/minibench";

async function perf() {
  await bench("foo", () => doSomething());
  await bench("bar", () => doSomethingElse());
}
perf();
// logs (will be colorized in a true TTY):
// foo x 6,926 ops/s (258 samples)
// bar x 5,128 ops/s (343 samples)

Or if you do not want to log out to the console:

import { benchmark } from "@marvinh/minibench";

benchmark("foo", () => doSomething()).then(result => {
  // result contains raw data about the benchmark
});

FAQ

Why should I use this instead of benchmarkjs?

benchmark.js is awesome and the main inspirations for minibench. They both share the same goal, but differ quite a bit in the approach they choose. The most noticeable difference is a much nicer api for async tests and native support for Promises.

minibench runs the code exactly as in the real world and doesn't do any black magic with function bodies. It deliberately leaves out the typical t-distribution based analysis, because they give a false sense of accuracy in a heavily jitted language such as JavaScript, where the population is very different for each single benchmark run.

How should I interpret the results?

As always, when looking at performance you should look out for a minimal improvement of 2-3x before even thinking about rewriting your app/algorithm. Everthing below that threshold is most likely not worth the effort.

How do I know that I measure the right thing?

Benchmarking a jitted language is not always straightforward. Make sure that your test code actually runs something and is not optimized away by the engine. If that happens you are only measuring how fast the engine detects that your code does nothing. This is mostly caused by unused variables or unused code inside for loops. Watch this excellent talk by Vyacheslav Egorov (a v8 engineer) about how to properly write benchmarks for JavaScript.

How does Meltdown and Spectre affect benchmarking?

Due to the recent Meltdown and Spectre attacks, high-resolution timers are not really high resolution anymore. This affects all browsers. Some round the measured time to 2ms, others introduce slight randomness. So don't compare the results to the last digits. Keep this in mind when benchmarking in browser environments.

License

MIT, see LICENSE file.