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

node-lite-profiler

v1.0.6

Published

A production-friendly Node.js profiler to measure **CPU time**, **memory usage**, **execution duration**, and **concurrency** for functions and HTTP APIs.

Readme

Node Profiler

A lightweight Node.js profiler to track CPU, memory, and response time for functions and APIs. Supports per-route aggregation, percentiles, async functions, and middleware.


Installation

npm install node-lite-profiler

Upgrade

npm install node-lite-profiler@latest

Quick Start

const { createProfiler, wrapFunction } = require('node-lite-profiler');

const profiler = createProfiler({
  enabled: true,
  sampleRate: 1,            // 1 for full sampling
  debug: true,              // optional: prints debug info
  onResult: (data) => {
    console.log('PROFILE RESULT:', data);
  },
  flushIntervalMs: 5000,    // optional: auto-flush every 5 seconds
  onFlush: (aggregates) => {
    console.log('Aggregated metrics:', aggregates);
  }
});

// Profile a standalone function
async function fetchUser() {
  await new Promise(r => setTimeout(r, 120));
  return { id: 1, name: 'Sunny' };
}

const profiledFetchUser = wrapFunction(profiler, 'fetchUser', fetchUser);

(async () => {
  await profiledFetchUser();
})();

Express Middleware

const express = require('express');
const { expressMiddleware } = require('node-lite-profiler');

const app = express();

// Add profiler middleware to all routes
app.use(expressMiddleware(profiler));

app.get('/users/:id', async (req, res) => {
  await profiledFetchUser();
  res.send({ id: req.params.id });
});

app.listen(3000, () => console.log('Server running on port 3000'));
  • Automatically tracks per-route metrics
  • Aggregates percentiles (p50, p90, p99) per route
  • Handles concurrent requests with inFlight tracking

Wrapping Functions

const profiledFunction = wrapFunction(profiler, 'functionName', asyncFunction);

// Now calling profiledFunction will measure CPU, memory, and time
await profiledFunction();
  • Works with sync and async functions
  • Automatically handles errors and decrements in-flight counters

Aggregates & Flush

Manual flush:

profiler.flush();
  • Computes percentiles per function/API
  • Clears stored metrics for the next interval
  • Can also use flushIntervalMs for automatic periodic flush

Example output:

{
  "function:fetchUser": { "count": 5, "p50": 120, "p90": 180, "p99": 200 },
  "api:GET /users/:id": { "count": 20, "p50": 30, "p90": 50, "p99": 80 }
}

Concurrency & Async

  • Handles multiple async executions in parallel
  • inFlight counter tracks concurrent executions per function/API
  • Percentiles computed over all samples

Limitations

  • CPU/memory are process-wide, not exact per async task
  • Per-route aggregation assumes route path is stable
  • Async_hooks tracking may add minor overhead

Next Steps / How to Experiment

  1. Fork the repo and try profiling multiple functions/APIs
  2. Experiment with different sampling rates
  3. Try integrating profiler into a real Node.js server

This profiler is designed to help developers understand real performance metrics without much setup, while keeping the usage simple and minimal.