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

teeny-perf

v2.0.0

Published

Performance and benchmarking utilities for Node

Downloads

1

Readme

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.

| Argument | Type | Default | Description | | -------- | -------- | ------- | -------------------- | | name | string | | the name of the test | | function | Function | | The 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

| Method | Description | | ------ | --------------------------------------- | | start | Start the timer | | cancel | Cancel the timer before its time is due |

Events

| Name | Description | | -------------- | ---------------------------------------- | | EVENT_CANCEL | Event sent when the timer is cancelled | | EVENT_COMPLETE | Event sent when the timer has terminated | | EVENT_START | Event sent when the timer starts | | EVENT_TICK | Event 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

| Method | Description | | ------ | ------------------------------------------------ | | start | Starts measuring performance | | stop | Stops measuring performance and store the result |

| Getter | Type | Description | | ---------------- | ------ | -------------------- | | results | Object | | | results.duration | Number | Time 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