Оптимизация функций JavaScript с использованием мемоизации

Beginner

This tutorial is from open-source community. Access the source code

Введение

В этом лабе мы будем изучать концепцию мемоизации в JavaScript. Мемоизация - это техника, используемая для оптимизации производительности функции путём кеширования результатов дорогостоящих вызовов функций и возврата кешированного результата при повторном появлении тех же входных данных. С помощью этого лабараторийного занятия мы научимся реализовывать мемоизацию в JavaScript с использованием объекта Map.

Это Guided Lab, который предоставляет пошаговые инструкции, чтобы помочь вам учиться и практиковаться. Внимательно следуйте инструкциям, чтобы выполнить каждый шаг и получить практический опыт. Исторические данные показывают, что это лабораторная работа уровня начальный с процентом завершения 100%. Он получил 92% положительных отзывов от учащихся.

Функция мемоизации

Для начала кодирования откройте Терминал/SSH и введите node. Эта функция возвращает мемоизированную (кешированную) функцию. Вот шаги по использованию этой функции:

  1. Создайте новый объект Map, чтобы создать пустой кэш.
  2. Верните функцию, которая принимает один аргумент, который будет передан в мемоизированную функцию. Перед выполнением функции проверьте, кэшировано ли уже значение для этого конкретного входного значения. Если да, верните кэшированный вывод; в противном случае сохраните и верните его.
  3. Используйте ключевое слово function, чтобы позволить мемоизированной функции изменить контекст this, если необходимо.
  4. Установите cache в качестве свойства на возвращаемой функции, чтобы иметь доступ к нему.

Вот код, который реализует функцию мемоизации:

const memoize = (fn) => {
  const cache = new Map();
  const cached = function (val) {
    return cache.has(val)
      ? cache.get(val)
      : cache.set(val, fn.call(this, val)) && cache.get(val);
  };
  cached.cache = cache;
  return cached;
};

Чтобы увидеть, как эта функция работает, вы можете использовать ее с функцией anagrams. Вот пример:

const anagramsCached = memoize(anagrams);
anagramsCached("javascript"); // занимает много времени
anagramsCached("javascript"); // возвращает практически мгновенно, так как оно кэшировано
console.log(anagramsCached.cache); // Кэшированная карта анаграмм

Резюме

Поздравляем! Вы завершили лабу по Функции мемоизации. Вы можете практиковаться в более многих лабах в LabEx, чтобы улучшить свои навыки.