Назад в блог

~ 4 минуты

Что такое мемоизация в JS. Примеры

218

11/30/2023

Мемоизация в JS - техника оптимизации, кэширующая результаты дорогостоящих функций, сокращая избыточные вычисления через сохранение предыдущих результатов

Вадим Пашаев

Вадим Пашаев

CEO PXSTUDIO_

Что такое мемоизация в JS. Примеры

Что такое мемоизация и для чего она нужна?

Мемоизация в программировании, от англ. ("memoize" или "memoization") в том числе и в JavaScript, относится к технике оптимизации, при которой результат выполнения функции кэшируется, чтобы избежать повторных вычислений для одних и тех же входных данных. Это особенно полезно в случаях, когда функция вызывается с одними и теми же аргументами несколько раз.

Мемоизация может повысить производительность, уменьшив количество повторных вычислений. В JavaScript мемоизацию часто реализуют с использованием объектов или других структур данных для хранения кэша результатов функции.

Пример мемоизации на JavaScript

Вот пример простой мемоизации в JavaScript с использованием замыкания:

function memoize(func) {
  const cache = {}
  return function(...args) {
    const key = JSON.stringify(args)
    if (cache[key]) {
      console.log('Достаем из кэша:', key)
      return cache[key]
    } else {
      console.log('Вычисление результата для ключа:', key)
      const result = func.apply(this, args)
      cache[key] = result
      return result
    }
  }
}

// Пример использования мемоизации
const add = (a, b) => {
  console.log('Обычно здесь происходят какие-то дорогостоящие вычисления...')
  return a + b
}

const memoizedAdd = memoize(add)

console.log(memoizedAdd(1, 2))  // Вычисляется результат
console.log(memoizedAdd(1, 2))  // Получается из кэша, не происходит повторное вычисление
console.log(memoizedAdd(3, 4))  // Вычисляется результат
console.log(memoizedAdd(3, 4))  // Получается из кэша

Здесь memoize - это функция высшего порядка, которая принимает функцию func и возвращает новую функцию с мемоизацией. В данном примере ключ для кэша вычисляется на основе строкового представления массива аргументов args.

Мемоизация простыми словами

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

Представьте, что у вас есть калькулятор, и вы часто спрашиваете его "2 + 2". Вместо того, чтобы каждый раз производить сложение, вы можете запомнить, что ответ равен 4. Таким образом, при следующем вопросе "2 + 2" вы сразу получите ответ 4, не тратя время на повторные вычисления.

В программировании мемоизация используется для ускорения выполнения функций. Если функция получает одинаковые данные (аргументы), она может сохранять результат своей работы, чтобы не пересчитывать его каждый раз. Это помогает сделать программу быстрее.

В каких случаях мемоизация оправдана

Конечно, мемоизация не в каждом случае нужна, ниже несколько примеров, когда использование "волшебного ящика" (мемоизации) оправдано:

  • Когда задача сложная: Если выполнение задачи требует много вычислений, то "волшебный ящик" может сохранять ответы, чтобы не думать каждый раз заново.

  • Когда одна и та же задача выполняется много раз: Если у вас есть одно и то же задание, которое нужно выполнять снова и снова, мемоизация поможет вам не тратить время на повторные вычисления.

  • Когда важна скорость: Если вам нужно, чтобы ваша задача решалась быстро, мемоизация может ускорить процесс, предоставляя готовые ответы.

  • Когда память не проблема: Если у вас достаточно места (памяти), чтобы хранить ответы, мемоизация становится еще более полезным инструментом.

Итак, мемоизация — это как использование "волшебного ящика", который помогает вам решать задачи быстро, особенно если они сложные и повторяются.

Для справки

Подписаться на рассылку

Получите лучшие новости по веб-разработке и AI

Подписаться на рассылку

Получите лучшие новости по веб-разработке и AI

Оценка проекта

Хотите быструю оценку Вашего проекта?

Василий Иванов
Максим Насенников
Виктория Мальцева
Vadim Pashaev

Заполните форму справа и наша команда экспертов поможет найти для Вас оптимальное решение вашей идеи или задачи

Есть интересная идея?

И вы очень хотите ее реализовать, пишите нам и получите подробное коммерческое предложение и быструю реализацию