~ 4 минуты
Что такое мемоизация в JS. Примеры
1827
11/30/2023
Мемоизация в 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, не тратя время на повторные вычисления.
В программировании мемоизация используется для ускорения выполнения функций. Если функция получает одинаковые данные (аргументы), она может сохранять результат своей работы, чтобы не пересчитывать его каждый раз. Это помогает сделать программу быстрее.
В каких случаях мемоизация оправдана
Конечно, мемоизация не в каждом случае нужна, ниже несколько примеров, когда использование "волшебного ящика" (мемоизации) оправдано:
-
Когда задача сложная: Если выполнение задачи требует много вычислений, то "волшебный ящик" может сохранять ответы, чтобы не думать каждый раз заново.
-
Когда одна и та же задача выполняется много раз: Если у вас есть одно и то же задание, которое нужно выполнять снова и снова, мемоизация поможет вам не тратить время на повторные вычисления.
-
Когда важна скорость: Если вам нужно, чтобы ваша задача решалась быстро, мемоизация может ускорить процесс, предоставляя готовые ответы.
-
Когда память не проблема: Если у вас достаточно места (памяти), чтобы хранить ответы, мемоизация становится еще более полезным инструментом.
Итак, мемоизация — это как использование "волшебного ящика", который помогает вам решать задачи быстро, особенно если они сложные и повторяются.
Для справки
Взгляните на наш стартап:
Выбирай экскурсии и активности по всему миру
Уже зарегистрировано 0 стран, 0 направлений, 0 экскурсий
Есть интересная идея?
И вы очень хотите ее реализовать, пишите нам и получите подробное коммерческое предложение и быструю реализацию