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

isitfast

v0.0.8

Published

A modular benchmarking library with V8 warmup and cpu/ram denoising for the most accurate and consistent results.

Downloads

10

Readme

Isitfast

A modular benchmarking library with V8 warmup and CPU/RAM denoising for the most accurate and consistent results.

You no longer have to ask yourself, "Is it fast?" Just benchmark it!

Key Features

  • Waits until V8 optimizations kick in and benchmarks become less noisy.
  • Eliminates performance noise caused by benchmark wrapper functions.
  • Reuses a couple of UInt32Arrays to store stats for reduced memory noise.
  • Runs GC before every benchmark and suite for reduced memory noise.
  • Uses high-resolution time in nanoseconds for more accurate CPU results.
  • Exposes lifecycle events for real-time data monitoring.
  • Prints colorful benchmark results in the terminal (verbose/compact).
  • Allows combining different output strategies (terminal/markdown/etc.).

Installation

To install, run the following command in your terminal:

yarn add isitfast

How to run

It is recommended to run isitfast with the --expose-gc Node flag to enable the library to run GC and collect more statistically correct memory data.

When used in a TypeScript environment, you can run it like this: node --expose-gc -r ts-node/register benchmarks/benchmarkName.ts.

For the most accurate results, it is recommended to run benchmark suites in different JS realms by putting them in separate files and executing them individually.

Example

import { suite, useTerminal } from "isitfast";

// define your suite with benchmarks
const testBenchmark = suite("Test")
  .add("emptyAsync", async () => {})
  .add("emptySync", () => {});

(async () => {
  // collect data and print them into a terminal
  useTerminal();

  // run all benchmarks and trigger lifecycle events
  await testBenchmark.run();
})();

API

Suite

You can create a Suite with by calling either suite(name: string, options?: DeepPartial<Options>) or new Suite(name: string, options?: DeepPartial<Options>).

const testOne = suite("Test One", {
  // options
});

const testTwo = new Suite("Test Two", {
  // options
});

These are the default options:

{
  cpu: {
    chunkSize: 100,
    compareSize: 25,
    rangePercent: 1,
  },
  ram: {
    chunkSize: 5,
    compareSize: 5,
    rangePercent: 1,
  },
  offset: {
    allow: true,
    rangePercent: 1,
  },
  gc: {
    allow: true,
  }
}

Modes

useTerminal

Listens to events and prints verbose suite and benchmark results into a terminal.

// subscribe to events
useTerminal();

// run suite which publishes data to the events
await runBenchmarks.run();

useTerminalCompact

Listens to events and prints compact suite and benchmark results into a terminal.

// subscribe to events
useTerminalCompact();

// run suite which publishes data to the events
await runBenchmarks.run();

Events

The Suite by itself doesn't return any data. For consuming suite and benchmarks data you should listen to events. All events are prefixed with $.

Behind the scenes isitfast uses μEve to create, subscribe to and publish into events.

You can easily import sub/clr/has event functions from isitfast. They're just re-exported functions from μEve.

  • $suiteBefore Before suite gets run
  • $suiteOffsets After suite offsets get calculated
  • $suiteAfter After suite gets run
  • $benchmarkBeforeAll Before benchmark of one type gets run
  • $benchmarkBeforeEach Before each benchmark of one type gets run
  • $benchmarkAfterEach After each benchmark of one type gets run
  • $benchmarkAfterAll After benchmark of one type gets run