Miss any of our Open RFC calls?Watch the recordings here! »

This package has been deprecated

Author message:

This package has moved to @starryinternet/map-memo

map-memo

2.1.1 • Public • Published

map-memo

Build Status

Generic memoization using Map and WeakMap.


Installing

npm install --save map-memo

What/Why?

Memoization in JavaScript has typically been limited to arguments with primitive values, or by utilizing hacks such as stringifying objects.

By storing arguments using a series of nested cache objects backed by Map and WeakMap, map-memo is able to memoize functions with any argument types.


Example

'use strict';
 
const memoize = require('map-memo');
 
function loop( fn, n ) {
  let v;
 
  for ( let i = 0; i < n; ++) {
    v = fn( i );
  }
 
  return v;
}
 
let mem = memoize( loop );
 
console.log( mem( Math.sqrt, 1e9 ) ); // slow
console.log( mem( Math.sqrt, 1e9 ) ); // fast!

Example with expire time in milliseconds

'use strict';
 
const memoize = require('map-memo');
 
function getRandom() {
  return Math.random();
}
 
let mem = memoize( getRandom, { ttl: 1000 } );
console.log( mem() );
console.log( mem() ); // Same value as above
 
setTimeout( function() {
  console.log( mem() ); // Different value
}, 1001 );

Example with asynchronous function

'use strict';
 
const memoize = require('map-memo');
 
function loopAsync( fn, n ) {
  return new Promise( ( resolve, reject ) => {
    let v;
 
    for ( let i = 0; i < n; ++) {
      v = fn( i );
    }
 
    resolve( v );
  });
}
 
let mem = memoize( loopAsync );
 
mem( Math.sqrt, 1e9 ).then( result => {
  console.log( result ); // slow
  mem( Math.sqrt, 1e9 ).then( console.log ); // fast!
});

Install

npm i map-memo

DownloadsWeekly Downloads

74

Version

2.1.1

License

MIT

Last publish

Collaborators

  • avatar