Мемоизация в JavaScript: оптимизация производительности функций с помощью кеширования

Вот пример мемоизации в 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для вычисления результата, сохраняет его в кеше и возвращает его.

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