PassFront
  1. PassFront
  2. База знаний
  3. Производительность в JS

Что такое мемоизация?

Производительность в JS

Мемоизация — это техника оптимизации: результаты вызова функции кешируются по её аргументам, и при повторном вызове с теми же аргументами возвращается сохранённое значение вместо повторного вычисления.

Условие применимости

Мемоизировать имеет смысл только чистые функции — те, что при одинаковых аргументах всегда дают одинаковый результат.

Простая реализация

function memoize(fn) {
  const cache = new Map();
  return function (...args) {
    const key = JSON.stringify(args);
    if (cache.has(key)) {
      return cache.get(key);
    }
    const result = fn.apply(this, args);
    cache.set(key, result);
    return result;
  };
}

const slowSquare = (n) => n * n;
const fastSquare = memoize(slowSquare);
fastSquare(4); // вычислит
fastSquare(4); // из кеша

Кеш живёт в замыкании.

Где применяют

  • Тяжёлые вычисления (факториал, числа Фибоначчи).
  • useMemo / useCallback в React.
  • Селекторы (reselect в Redux).

Компромиссы

  • Экономит CPU ценой памяти (кеш растёт).
  • Нужна стратегия очистки (LRU) для больших/бесконечных наборов входов.

Коротко для собеседования

Мемоизация кеширует результаты чистой функции по аргументам и возвращает их при повторных вызовах. Обменивает память на скорость; кеш обычно хранят в замыкании (Map). Основа useMemo и reselect.

Другие вопросы раздела