Skip to main content

缓存与记忆化

什么是记忆化

通过使用记忆化,遇到相同的输入会立即触发内部缓存命中直接返回结果。

记忆化 -> 内部函数级缓存 -> 避免重复计算
caution

单词是 memoize 不是 memorize 。

同步缓存

function memoize(fn) {
let cache = {};
return (...args) => {
const n = args[0]; // just taking one argument here
if (n in cache) {
console.log('Fetching from cache');
return cache[n];
}
console.log('Calculating result');
const result = fn(n);
cache[n] = result;
return result;
};
}
// a simple pure function to get a value adding 10
const add = n => n + 10;
console.log('Simple call', add(3));

const memorizedAdd = memoize(add);
console.log(memorizedAdd(3)); // Calculating result
console.log(memorizedAdd(3)); // Fetching from cache
console.log(memorizedAdd(4)); // Calculating result
console.log(memorizedAdd(4)); // Fetching from cache

为了简化生成密匙的逻辑,简单的记忆化仅限于一元函数。对于需要记忆化多个参数的函数可以使用柯里化,来避免缓存层给函数增加额外的开销和复杂度。

异步缓存

// TODO