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

simprof

v3.0.0

Published

Simple code profiler

Downloads

12

Readme

simprof

A simple code profiler.

Basic usage

const Profiler = require('simprof');

Profiler.enable();
const profiler = new Profiler('Foo');

let prof = profiler.begin('bar');
// ...
// Do stuff
// ...
prof.end();

Getting the results

To get a dump of the profiler results, send SIGUSR2 to the relevant node process:

kill -s USR2 31337

Note that the profiler starts disabled. In addition to explicitly enabling it with Profiler.enable(), it will be enabled by sending the USR2 signal to it.

This means that you can get a dump from a disabled profiler by sending the process USR2 twice.

Advanced usage

const Profiler = require('simprof');

// Create a new profiler instance, often one per file.
const profiler = new Profiler('Whatever');

class Whatever {

	vanilla() {
		// Create a named profiler block
		// NOTE: There is no magic syntax here,
		// `#vanilla` is just a common way to refer to an instance method.
		let prof = profiler.begin('#vanilla');

		// DO ALL THE THINGS
		this.do();
		all();
		the();
		this.things();

		// End the profiler block
		prof.end();
	}

	nested() {
		// You can have nested profiler blocks,
		// which is helpful for HUGE MONOLITHIC FUNCTIONS and whatnot.
		// NOTE: Again, no magic syntax here, just human-readable names.
		let prof = profiler.begin('#nested');

		let profFoo = profiler.begin('#nested foo');
		let foo = this.foo();
		foo.blah();
		profFoo.end();

		let profBar = profiler.begin('#nested bar');
		let bar = this.bar();
		bar.blah();
		profBar.end();

		let profBaz = profiler.begin('#nested baz');
		let baz = this.baz();
		baz.blah();
		profBaz.end();

		prof.end();
	}

	async wrapAndRun() {
		// This wraps and immediately runs the given function
		return await profiler.run('#wrapAndRun()', async() => {
			// Do stuff
		});
	}

	profileSequenceOfSteps() {
		// This allows a sequence of steps within an overall function to be individually profiled
		let profseq = profiler.sequence('#profileSequenceOfSteps');
		profseq.step('step1');
		// do stuff
		profseq.step('step2');
		// do stuff
		profseq.step('step3');
		// do stuff
		profseq.end();
	}

}