Skip to content

Least recently used (LRU) cache in front of a generator function

Notifications You must be signed in to change notification settings

nahidakbar/lru-generator

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

14 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

lru-generator

SCM Build Status Documentation Coverage Coverage Coverage Coverage

Least Recently Used Cache using generator.

TL;DR

// sync

var generate_callback = function(key) {...} ; // something expensive to generate
var limit = 2; // say we are only caching 2 items
var generate = require('lru-generator')(limit, generate_callback)
...
generate(key1); // calls generate_callback(key1)
generate(key2); // calls generate_callback(key2)
generate(key3); // calls generate_callback(key3)
generate(key2); // returns previous results which is still in cache
generate(key1); // calls generate_callback(key1) as it is no longer in cache

// misc

generate.isCached(key);

generate.getCached(key);

generate.cache(key, value);

generate.purge(key, value);

Complexity

Whatever complexity your JS engine has for accessing object properties.

Asynchronous

I was going to write async functionality but then I realised that it is not really needed for modern asynchronous programming. You can just have a an async generator function or can just return a promise from generator function. This will allow you to await or .then the return value. There is no need to add yet another level of indirection.

Current generate.async is more for you if you want old style callbacks for generator function and want to be called back with generated value. This is deprecated. Just keep things simple by using modern async/await.

// async

var generate_callback = function(key, callback) { ... callback(value) ... }; //
var generate = require('lru-generator')(limit, generate_callback, {async: true});

generate.sync(key, [custom_generate_callback]);

generate.async(key, callback, [custom_generate_callback]);

// generate(...) has the same signature as generate.sync or generate.async based on setting

About

Least recently used (LRU) cache in front of a generator function

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published