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

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

Что такое мемоизация?

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

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

Итак, Есть ли способ запускать нашу дорогостоящую функцию несколько раз, не замедляя наш код?

Мы запустим эту дорогостоящую функцию один раз для определенного ввода, а затем кэшируем (сохраняем) ее результат. Так что в следующий раз, если функция будет вызвана с теми же входными данными, вместо запуска дорогостоящей и трудоемкой функции мы просто возьмем результат из кеша. И именно так мы предотвращаем медленную работу нашего кода. Этот процесс называется мемоизацией.

Как использовать мемоизацию в JavaScript?

Давайте рассмотрим пример и посмотрим, как мы используем мемоизацию в JavaScript.

Я хочу написать функцию, которая будет проверять, является ли данный ввод палиндромом или нет.

Реализация мемоизации в JavaScript

const cachePalinChecker = {};
function palindromeChecker(string) {
  // Checking in cache
  if(cachePalinChecker[string] != null) {
      console.log("Value getting from cache");
      console.log(string + " is " + cachePalinChecker[string]);
      return;
   }
const arrayValues = string.split('');
const reverseArrayValues = arrayValues.reverse();
const reverseString = reverseArrayValues.join('');
if(string == reverseString) {
   // Storing in the cache for the first time
   cachePalinChecker[string] = "palindrome";
   console.log("Regular Calculation");
   console.log(string + " is " + cachePalinChecker[string]);
   return;
}
// Storing in the cache for the first time
cachePalinChecker[string] = "not palindrome";
console.log("Regular Calculation");
console.log(string + " is " + cachePalinChecker[string]);
return;
}
palindromeChecker("madam");
palindromeChecker("racecar");
palindromeChecker("racecar");
palindromeChecker("madam");
palindromeChecker("john");
palindromeChecker("john");

Выход:

Как видно из приведенного выше примера, мы кэшируем или сохраняем выходные данные функции palindromeChecker() в объекте (cachePalinChecker), когда она выполняется с уникальными входными данными для первый раз. Но как только мы запускаем функцию в следующий раз с теми же входными данными, она сначала проверяет кэш, а затем возвращает результат из него без повторного выполнения всех операций.

Такова была простая реализация мемоизации в JavaScript. Теперь давайте посмотрим на другой пример, где мы используем основные концепции JavaScript, такие как замыкания, функции более высокого порядка, для реализации мемоизации.

Реализация мемоизации с использованием основных концепций JavaScript

Выход:

В приведенном выше примере мы использовали основные концепции JavaScript для реализации мемоизации. Как видите, у нас есть функция square(), которая возводит число в квадрат. И мы кэшировали результат каждый раз, когда функция вызывается с уникальным вводом. И если ввод аналогичен, то вместо повторного выполнения всей функции мы просто возвращаем результат из кеша.

Спасибо, что дочитали до этого места. Я надеюсь, что теперь вы поняли важность запоминания и его важность.

Если вы хотите больше такого контента, подписывайтесь на меня на Medium и на мой канал YouTube.

Вы также можете связаться со мной в Твиттере