// to create a cache, you can use an IIFE to return a function with access to a local variable:
const functionWithCache = (function() {
const cache = {};
return function(num) {
// example: returns whether an input number is even or not
return num % 2 === 0;
};
})();
// you can use this to memoize functions:
const memoizedFunction1 = (function() {
const cache = {};
return function(num) {
if (num in cache) {
return cache[num];
}
// example: returns whether an input number is even or not
return cache[num] = num % 2 === 0;
};
})();
// for more complex parameters:
const memoizedFunction2 = (function() {
const cache = {};
return function() {
const cacheQuery = Array.from(arguments).map((arg) => JSON.stringify(arg)).join(",");
if (cacheQuery in cache) {
return cache[cacheQuery];
}
// function body
return cache[cacheQuery] = result;
};
})();
// with that we can create a function to convert other functions into memoized functions:
function memoize(func) {
const cache = {};
return function() {
const args = Array.from(arguments);
const cacheQuery = args.map((arg) => JSON.stringify(arg)).join(",");
if (cacheQuery in cache) {
return cache[cacheQuery];
}
return cache[cacheQuery] = func(...args);
};
}
Caching is a common technique for making your applications faster. It lets you avoid slow operations by reusing previous results. In this article, Ayo Isaiah walks us through the different options for caching in NodeJS applications