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

cache-helpers

v1.4.2

Published

caching convenience functions

Downloads

17

Readme

cache-helpers

cache-helpers is a Node.JS module containing several generic caching functions. It was written as a way of abstracting out a number of commonly used patterns in the Dark Sky API.

  • cacheHelpers.once: Takes a (presumably expensive) function which takes a single callback and calls it with an optional error argument and a data argument. It returns a function that you may use as a proxy for the passed function. The first time it is called, it will call the function and cache its data. Subsequent calls will return the cached data.

    (It is smart enough to only call the backing function once even if it is called many times simultaneously.)

  • cacheHelpers.timeBasedWithGrace: Takes a (presumably expensive) function, like once, above, and two numbers: a soft cache timeout and a hard cache timeout. These timeouts may be in any arbitrary units you prefer, though either seconds or milliseconds is most convenient. Like once, it returns a proxy function, which is called with the current time (in whatever units you specified for the timeouts), and a callback which is called when the data is available.

    The first time this function is called, it will call the callback once the backing function returns. Subsequent calls do different things depending on how much time has elapsed since the data was cached: if the soft timeout has not elapsed, then the cached data is returned immediately. If the soft timeout has elapsed but the hard timeout has not, the cached data is returned immediately, but the backing function is called in the background to update the cache, so as not to impede whatever processing you want to do. Finally, if the hard timeout has elapsed, the cache is updated before calling the callback.

    You may think of these two limits as "the time until data is out of date" and "the time until data is unnacceptably out of date".

    (Like once, this function is smart enough to not call the backing function more often than necessary.)

These are kind of advanced, and may be fairly hard to understand without a concrete use case. Checking out the tests may help.

License

To the extent possible by law, The Dark Sky Company, LLC has waived all copyright and related or neighboring rights to this library.