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

@xaymar/ratelimiter

v0.3.0

Published

A simple but effective way to rate limit Tasks in JavaScript.

Downloads

5

Readme

RateLimiter

Simple but effective way to rate limit Tasks in JavaScript. Anything can be rate limited,

Features

  • Rate limiting for anything!
  • Looks nice I guess?
  • That's about it.

Usage

var { RateLimiter } = require("@xaymar/ratelimiter");

let limitMany = new RateLimiter(4);
let limitOne = new RateLimiter(1);

for (let idx = 0; idx < 3; idx++) {
    limitOne.queue(async () => {
        console.log("Only 1 of this can occur every 1s.");
        await new Promise((resolve, reject) => {setTimeout(() => {resolve();}, 1000);});
    });
}

for (let idx = 0; idx < 10; idx++) {
    limitMany.queue(async () => {
        console.log("This however can occur many times.");
        await new Promise((resolve, reject) => {setTimeout(() => {resolve();}, 1000);});
    });
}

FAQ

Why did you create this?

Multiple reasons, but here's two of the biggest examples:

  1. A script that was supposed to automatically help me generate the proper Copyright notice headers ended up deleting files, or creating empty headers. Limiting the numbers of sub-processes to 1 for the version control binary, and the number of parallel file handles to the number of CPUs significantly improved the stability. No more empty files, no more empty headers!
  2. Some resources are only available in limited quantity, such as encoder instances on NVIDIA GPUs, or CPU cores. Often it makes sense to rate limit to that limit, instead of pushing as much data through as possible and then ending up slower than if you did everything sequentially. Especially when it comes to heavy and complex tasks, like encoding.

Does this support WebWorkers?

No, but it is relatively easy to do without official support. See the example below:

// main.js
var { RateLimiter } = require("@xaymar/ratelimiter");

let worker = new Worker("worker.js");
let workerRL = new RateLimiter(1);

worker.onmessage = (event) => {
	worker.resolve(event);
}
workerRL.queue(async () => {
	return await new Promise((resolve, reject) => {
		worker.resolve = resolve;
		worker.reject = reject;
		worker.postMessage("Request");
	})
});

// worker.js
self.onmessage = (event) => {
	self.postMessage("Reply");
}

License

Available under GPLv3 as well as a commercial license. Contact [email protected] for more information.