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

Когда нужно использовать мемоизацию?

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

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

Когда мемоизация оправдана

  1. Функция чистая — одинаковые аргументы всегда дают одинаковый результат (иначе кеш вернёт неверное значение).
  2. Дорогое вычисление — тяжёлые расчёты, рекурсия (Фибоначчи), обработка больших данных.
  3. Повторяющиеся аргументы — функция часто вызывается с теми же входами.
  4. Ограниченное множество входов — иначе кеш растёт бесконечно.
const fib = memoize((n) => (n < 2 ? n : fib(n - 1) + fib(n - 2)));

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

  • Тяжёлые чистые вычисления.
  • useMemo/useCallback в React — избежать пересчёта/пересоздания между рендерами.
  • Селекторы (reselect) — производные данные из стора.

Когда НЕ стоит

  • Дешёвая функция — кеш дороже вычисления.
  • Аргументы почти всегда разные — кеш не попадает.
  • Нечистая функция — результат зависит от внешнего состояния.
  • Память ограничена, а входов много.

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

Мемоизация нужна для чистых, часто вызываемых функций с дорогим вычислением и повторяющимися аргументами (Фибоначчи, useMemo, селекторы). Не стоит применять к дешёвым или нечистым функциям и при большом множестве уникальных входов — кеш будет только тратить память.

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