Что такое мемоизация?
Производительность в 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.