Когда нужно использовать мемоизацию?
Производительность в JS
Мемоизацию используют, когда функция чистая, вызывается часто с повторяющимися аргументами и её вычисление дорогое. Иначе кеш только тратит память.
Когда мемоизация оправдана
- Функция чистая — одинаковые аргументы всегда дают одинаковый результат (иначе кеш вернёт неверное значение).
- Дорогое вычисление — тяжёлые расчёты, рекурсия (Фибоначчи), обработка больших данных.
- Повторяющиеся аргументы — функция часто вызывается с теми же входами.
- Ограниченное множество входов — иначе кеш растёт бесконечно.
const fib = memoize((n) => (n < 2 ? n : fib(n - 1) + fib(n - 2)));Где применяют
- Тяжёлые чистые вычисления.
useMemo/useCallbackв React — избежать пересчёта/пересоздания между рендерами.- Селекторы (reselect) — производные данные из стора.
Когда НЕ стоит
- Дешёвая функция — кеш дороже вычисления.
- Аргументы почти всегда разные — кеш не попадает.
- Нечистая функция — результат зависит от внешнего состояния.
- Память ограничена, а входов много.
Коротко для собеседования
Мемоизация нужна для чистых, часто вызываемых функций с дорогим вычислением и повторяющимися аргументами (Фибоначчи, useMemo, селекторы). Не стоит применять к дешёвым или нечистым функциям и при большом множестве уникальных входов — кеш будет только тратить память.