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

qlimiter

v0.3.2

Published

fast nodejs call rate limiter

Downloads

10

Readme

qlimiter

Configurable call rate limiter, for any function taking a callback as the last argument. Extendable with externally written limits.

Quick Start

var qlimiter = require('qlimiter');

// rate limit func to no more than 5 calls per 100 milliseconds
var rateLimitedFunc = qlimiter(func, {maxPerInterval: 5, interval: 100});

rateLimitedFunc(1, 2, function(err, ret) {
    // ret => 3
})

function func(a, b, cb) {
    var ret = a + b;
    cb(null, ret);
}

Benchmark

100k 2-arg maxConcurrent calls in 47 ms (2 concurrent)

100k 2-arg maxPerInterval calls in 152 ms (max 1000 during any 1 ms)

Api

qlimiter( func, [options] )

Return a function that invokes func when all rate limit criteria are met, else queues the call. Calls are run in order, queued calls first, though they may complete out of order. The function func must always take a callback as its last argument.

Options:

  • limits - array of custom limits to test
  • maxConcurrent - limit number of calls running concurrently
  • minInterval - minimum calls spacing, in milliseconds
  • maxPerInterval - limit calls per rolling time interval milliseconds
  • interval - rolling time interval, default 1000 milliseconds

Extending

Custom limits can be plugged into the qlimiter limits stack. Custom limits are tested before built-in limits.

A custom limit inherits from qlimiter.Limit or must implements methods

setOnUnblock( onUnblock ) - function to notify the limiter that the resource usage has dropped below the limit threshold.

acquire( args ) - called to test whether a call can run. Return true to allow the call to run now, false to block it until later. If blocked, must notify the limiter when unblocked with the onUnblock method. Acquire is presented the arguments of the call. Each call has a different args array, even if the args contain the same values.

release( args, isUndo ) - called to inform the limit that the resource is no longer used. Called when a call completes or to undo an acquire if the call was not started because another limit blocked it. The args argument is the identical object that was passed to acquire.

Change Log

  • 0.3.2 - unit tests
  • 0.3.0 - maxConcurrent, minInterval, maxPerInterval
  • 0.1.0 - first checkin, working but work still in progress

Todo

  • maxWaitingCount - cap wait queue
  • maxWaitingTime - max ms to wait
  • backoffTime -
  • backoffMultiplier -

Related Work

  • limiter -
  • function-rate-limit -
  • simple-rate-limiter -