���� JFIF �� � ( %"1"%)+...383,7(-.-
![]() Server : Apache/2.4.6 (CentOS) OpenSSL/1.0.2k-fips PHP/7.4.20 System : Linux st2.domain.com 3.10.0-1127.10.1.el7.x86_64 #1 SMP Wed Jun 3 14:28:03 UTC 2020 x86_64 User : apache ( 48) PHP Version : 7.4.20 Disable Function : NONE Directory : /proc/self/root/home/real/node-v13.0.1/deps/npm/node_modules/mem/ |
# mem [](https://travis-ci.org/sindresorhus/mem) > [Memoize](https://en.wikipedia.org/wiki/Memoization) functions - An optimization used to speed up consecutive function calls by caching the result of calls with identical input ## Install ``` $ npm install --save mem ``` ## Usage ```js const mem = require('mem'); let i = 0; const counter = () => ++i; const memoized = mem(counter); memoized('foo'); //=> 1 // cached as it's the same arguments memoized('foo'); //=> 1 // not cached anymore as the arguments changed memoized('bar'); //=> 2 memoized('bar'); //=> 2 ``` ##### Works fine with promise returning functions ```js const mem = require('mem'); let i = 0; const counter = () => Promise.resolve(++i); const memoized = mem(counter); memoized().then(a => { console.log(a); //=> 1 memoized().then(b => { // the return value didn't increase as it's cached console.log(b); //=> 1 }); }); ``` ```js const mem = require('mem'); const got = require('got'); const memGot = mem(got, {maxAge: 1000}); memGot('sindresorhus.com').then(() => { // this call is cached memGot('sindresorhus.com').then(() => { setTimeout(() => { // this call is not cached as the cache has expired memGot('sindresorhus.com').then(() => {}); }, 2000); }); }); ``` ## API ### mem(fn, [options]) #### fn Type: `Function` Function to be memoized. #### options ##### maxAge Type: `number`<br> Default: `Infinity` Milliseconds until the cache expires. ##### cacheKey Type: `Function` Determines the cache key for storing the result based on the function arguments. By default, if there's only one argument and it's a [primitive](https://developer.mozilla.org/en-US/docs/Glossary/Primitive), it's used directly as a key, otherwise it's all the function arguments JSON stringified as an array. You could for example change it to only cache on the first argument `x => JSON.stringify(x)`. ##### cache Type: `Object`<br> Default: `new Map()` Use a different cache storage. Must implement the following methods: `.has(key)`, `.get(key)`, `.set(key, value)`, and optionally `.clear()`. You could for example use a `WeakMap` instead. ### mem.clear(fn) Clear all cached data of a memoized function. #### fn Type: `Function` Memoized function. ## Tips ### Cache statistics If you want to know how many times your cache had a hit or a miss, you can make use of [stats-map](https://github.com/SamVerschueren/stats-map) as a replacement for the default cache. #### Example ```js const mem = require('mem'); const StatsMap = require('stats-map'); const got = require('got'); const cache = new StatsMap(); const memGot = mem(got, {cache}); memGot('sindresorhus.com') .then(() => memGot('sindresorhus.com')) .then(() => memGot('sindresorhus.com')); console.log(cache.stats); //=> {hits: 2, misses: 1} ``` ## License MIT © [Sindre Sorhus](https://sindresorhus.com)