Что такое мемоизация? Это концепция в JavaScript, используемая для кэширования результатов дорогостоящих или длительных операций, чтобы мы могли повторно использовать эти результаты без повторного запуска операции.

Как работает запоминание? Давайте представим, что мы используем API Google Maps для определения координат города. Без мемоизации каждый раз, когда поступает запрос на поиск координат «Лос-Анджелеса», нам нужно было бы делать HTTP-запрос к API Google Maps. HTTP-запросы могут быть непредсказуемыми или медленными. С концепцией мемоизации мы сохраняем/кэшируем результаты первого запроса, чтобы мы могли повторно использовать эти результаты, если запрашивается одна и та же информация. Таким образом, когда пользователь впервые запрашивает координаты «Лос-Анджелеса», мы делаем HTTP-запрос к Google Maps API, а затем сохраняем полученные координаты на карте. В следующий раз, когда пользователь запросит координаты «Лос-Анджелеса», мы немедленно вернем результат, который хранится на нашей карте, вместо того, чтобы делать HTTP-запрос.

В приведенном ниже примере мы создаем функцию getCoordinates, которая возвращает координаты заданного города. В этой функции мы проверяем, сохранен ли уже город на нашей карте. Если такой город уже существует, мы сразу возвращаем результат, не делая HTTP-запрос. Если город не существует, мы делаем HTTP-запрос с помощью функции getGoogleCoordinates(). Затем мы сохраняем результат на нашей карте. Как видите, после того, как мы вызвали нашу функцию для поиска координат Лос-Анджелеса, карта содержит координаты Лос-Анджелеса: [ 34.0522, 118.2437 ].

const getGoogleCoordinates = (city) => {
  if (city === 'los angeles') {
    return [34.0522, 118.2437];
  } else if (city === 'new york') {
    return [40.7128, 74.006];
  }
};
let existingCoordinates = new Map();
function getCoordinates(city) {
  if (existingCoordinates.has(city)) {
    return existingCoordinates.get(city);
  }
  let result = getGoogleCoordinates(city);
  existingCoordinates.set(city, result);
  return result;
}
getCoordinates('los angeles');
console.log(existingCoordinates); 
//Map { 'los angeles' => [ 34.0522, 118.2437 ] }
getCoordinates('new york');
console.log(existingCoordinates);
/* Map {   'los angeles' => [ 34.0522, 118.2437 ], 'new york' => [ 40.7128, 74.006 ]} */

Какова цель мемоизации? Мы обмениваем производительность на память.