В този блог ще започнем с въвеждането на мемоизацията в 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 канал.

Можете също така да се свържете с мен в Twitter