Мемоизация - это оптимизационная техника в программировании, которая заключается в сохранении результатов выполнения функции для избежания повторных вычислений при передаче тех же аргументов.
Базовая логика функции для мемоизации может быть реализована следующим образом:
function memoize(func) {
const cache = {}
return function (...args) {
const key = JSON.stringify(args)
if (key in cache) {
return cache[key]
} else {
const result = func.apply(this, args)
cache[key] = result
return result
}
}
}
function expensiveOperation(n) {
console.log(`Performing expensive operation for ${n}`)
return n * 2
}
const memoizedOperation = memoize(expensiveOperation)
console.log(memoizedOperation(5)) // Performing expensive operation for 5, 10
console.log(memoizedOperation(5)) // 10 (result taken from cache)
console.log(memoizedOperation(6)) // Performing expensive operation for 6, 12
console.log(memoizedOperation(6)) // 12 (result taken from cache)
В этом примере мы определяем функцию memoize
, которая принимает другую функцию func
в качестве аргумента и возвращает новую функцию, которая сохраняет результаты выполнения функции func
в кеше. Функция memoize
использует объект cache
для хранения результатов выполнения функций, и возвращает результаты из кеша, если они уже были вычислены.
Затем мы определяем функцию expensiveOperation
, которая имитирует выполнение дорогостоящей операции, и используем функцию memoize
для создания новой функции memoizedOperation
, которая будет кэшировать результаты выполнения expensiveOperation
. При первом вызове функции memoizedOperation
с аргументом 5, результат будет вычислен и сохранен в кеше. При последующих вызовах с аргументом 5, результат будет взят из кеша без необходимости повторного выполнения дорогостоящей операции.
Таким образом, мемоизация может быть полезной для оптимизации производительности функций, которые могут быть вызваны с теми же аргументами несколько раз.