缓存函数是将函数的计算结果缓存起来,当下次以同样的参数调用该函数时,直接返回已缓存的结果,无需再次执行函数。这是一种常见的以空间换时间的性能优化手段。
要实现缓存函数的功能,我们可以把经过序列化的参数作为key,再把第一次调用后的结果作为value存储到对象中。在每次执行函数调用前,都需要判断缓存中是否含有对应的key,如果有的话,直接返回该key对应的值。
实现方式
function memorize(fn){ const cache = Object.create(null) return function(...rest){ const args = JSON.stringify(rest) return cache[args] || (cache[args] = fn.apply(fn,args)) } } let complexCalc = (a, b) => { // 执行复杂的计算 }; let memoCalc = memorize(complexCalc); memoCalc(666, 888); memoCalc(666, 888); // 从缓存中获取
用什么数据结构存储并不重要,数组、对象、map、weakMap。