「1 秒变 1 毫秒」:教你用 JavaScript Memoization 优雅加速计算!

374 阅读1分钟

什么是 Memoization?

Memoization(记忆化),又叫函数记忆,是一种 缓存技术。它的原理非常简单:

对相同的输入参数,只计算一次,把结果缓存下来。下次遇到一样的输入,直接取缓存,再也不用计算啦!


为什么 Memoization 这么香?

  • 提升性能:耗时计算只做一次,速度提升 10 倍、100 倍不是梦。
  • 无需改变函数核心逻辑:像“外挂”一样增强你的函数!
  • 简单易用:几行封装代码,哪里慢贴哪里。

实战案例1:普通递归 VS Memoization 加速

先看最“慢”的写法

function fib(n) {
  if (n < 2) return n;
  return fib(n - 1) + fib(n - 2);
}
console.time('plain');
console.log(fib(40)); // 慢到想骂人
console.timeEnd('plain');

优雅地 Memoize 一下

function memoize(fn) {
  const cache = {};
  return function(...args) {
    const key = args.join(',');
    if (cache[key]) {
      return cache[key];
    }
    const result = fn.apply(this, args);
    cache[key] = result;
    return result;
  }
}

const memoizedFib = memoize(function fib(n) {
  if (n < 2) return n;
  return memoizedFib(n - 1) + memoizedFib(n - 2);
});

console.time('memoized');
console.log(memoizedFib(40)); // 秒出!
console.timeEnd('memoized');

你会发现,原来要跑几秒甚至更久的递归,memoize 一下就瞬间完成!


结语

如果你觉得这篇文章有用,记得点赞、收藏、分享,关注我查看更多前端干货!