JavaScript- wzorzec zapamiętywania

Funkcja jest obiektem

W języku JavaScript, funkcje są obiektami, a więc mogą mieć właściwości. Wykorzystamy ten fakt do zapamiętywania zwracanych wartości przez funkcję, dzięki czemu przy następnym jej uruchomieniu z tymi samymi argumentami, otrzymamy wynik od razu. Wzorzec ten nosi nazwę zapamiętywania (ang. memoizaiton).

Implementacja

W poniższym przykładzie mamy funkcję longRunningFunction (jak jej sama nazwa mówi, działa długo). Na samym początku sprawdzamy czy dla danej funkcji, istnieje już właściwość cache, w której to będziemy przechowywać wyniki funkcji. Jeśli nie istnieje, to tworzymy.

Dalej tworzymy klucz, po którym będziemy odwoływać się do wyników. Zastosowanie zmiennej arguments powoduje, że usunięcie lub dodanie kolejnego parametru do funkcji, nie popsuje niczego.

Następnie sprawdzamy czy już mamy wyniki dla danych argumentów. Jeśli tak, to od razu zwracamy wynik, w przeciwnym przypadku wykonujemy potrzebne obliczenia.

I to tyle 🙂

Podsumowanie

Pamiętać trzeba, że serializacja obiektów za pomocą JSON.stringify powoduje, że tracą one „tożsamość”. Dla dwóch różnych obiekty, ale mających takie same właściwości spowoduje, że będą one współdzieliły ten sam wpis w obiekcie cache.

Ponadto zapamiętywanie wyników może doprowadzić do nadmiernego zajmowania pamięci, ponieważ wyniki są zapisywane w właściwości.

Źródła:

  1. https://nafrontendzie.pl/wzorzec-memoization-javascript/
Reklamy

Skomentuj

Wprowadź swoje dane lub kliknij jedną z tych ikon, aby się zalogować:

Logo WordPress.com

Komentujesz korzystając z konta WordPress.com. Wyloguj /  Zmień )

Zdjęcie na Google+

Komentujesz korzystając z konta Google+. Wyloguj /  Zmień )

Zdjęcie z Twittera

Komentujesz korzystając z konta Twitter. Wyloguj /  Zmień )

Zdjęcie na Facebooku

Komentujesz korzystając z konta Facebook. Wyloguj /  Zmień )

w

Connecting to %s