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 🙏

© 2024 – Pkg Stats / Ryan Hefner

@darylt/benchmarker

v1.0.1

Published

Benchmarks JS functions using the builtin perf_hooks. Can benchmark several functions at the same time for multiple times, and returns stats on runtimes.

Downloads

6

Readme

JS Benchmarker (NodeJS)

Benchmarker is a basic JS function benchmarking utility. This version is built to run with NodeJS apps and not compatible for use with browsers. For the browser-friendly version, check the version/vanilla-js branch. It uses Node's built-in perf_hook library to measure a function's completion time. To get readings that are more accurate, the number of times a function runs can be specified using the cycles argument.

Dependencies

  • perf_hooks (JS built-in)
  • mathjs

Installation (npm)

Run npm install @darylt/benchmarker in your npm project folder.

Installation (Github Source Code)

Run npm install to install both dependencies.

Usage

The benchmarker takes in an array of callback functions and runs them n number of times. It returns an array of objects containing each tested function's name and average completion times. Anonymous functions will be named AnonymousFuncN, where N is the index position of that function in the callback array.

The benchmark(functionsToRun, cycles) function takes in two arguments.

  1. functionsToRun - an array containing all the functions to benchmark.
  2. cycles - an integer value that determines how many times to run each function.

To use this in the browser, use const { benchmark } = require('path_to/benchmark.js') near the start of the script, then call benchmark() as described above.

Caution

The current iteration does not support asynchronous functions.

The benchmarked function will run normally, benchmark() does not prevent any functional side-effects. If your function's side effects depends on external factors, runtimes may differ.

For example, consider the following function:

let status = true;

// ...

const exampleFunc = function() {
  if (status) {
    let i = 0;
    while (i < 1000000000) {
      i++;
    }
    status = false;
  }
};

results = benchmark([exampleFunc], 100);

The first time exampleFunc runs, it will execute the while loop. However, any subsequent runs will not because status has been set to false. Therefore the first reported completion time will be much higher than all subsequent runs of this function. To check the logged completion times, use results.exampleFunc.perfHistory or results[0].perfHistory. Use the latter if you passed in anonymous functions, or use its automatically-assigned name AnonymousFuncN, where N is the index of that function in the callback function array.