Вот пример мемоизации в JavaScript:
function expensiveOperation(n) {
console.log('Performing expensive operation...');
// Perform some time-consuming computation here
return n * 2;
}
function memoizedExpensiveOperation() {
let cache = {};
return function(n) {
if (n in cache) {
console.log('Fetching result from cache...');
return cache[n];
} else {
const result = expensiveOperation(n);
cache[n] = result;
return result;
}
};
}
const memoizedFn = memoizedExpensiveOperation();
console.log(memoizedFn(5)); // Performs the expensive operation and returns 10
console.log(memoizedFn(5)); // Fetches the result from cache and returns 10
console.log(memoizedFn(10)); // Performs the expensive operation and returns 20
console.log(memoizedFn(10)); // Fetches the result from cache and returns 20
В этом примере у нас есть функция expensiveOperation
, которая выполняет некоторые трудоемкие вычисления. Мы хотим оптимизировать эту функцию, используя мемоизацию для кэширования результатов для будущего использования. Функция memoizedExpensiveOperation
возвращает мемоизированную версию expensiveOperation
.
Функция memoized создает объект кэша для хранения результатов предыдущих вычислений. При вызове с аргументом n
он сначала проверяет, присутствует ли уже результат для этого аргумента в кеше. Если это так, функция извлекает результат из кэша и возвращает его. Если результата нет в кеше, он вызывает функцию expensiveOperation
для вычисления результата, сохраняет его в кеше и возвращает его.
При использовании мемоизации последующие вызовы мемоизированной функции с тем же аргументом могут извлекать результат из кеша вместо его повторного вычисления, что повышает производительность.