Wat is Memoization
Memoization is een optimalisatietechniek die toepassingen versnelt door de resultaten van dure functieaanroepen op te slaan en het resultaat in de cache terug te geven wanneer dezelfde ingangen opnieuw worden geleverd.
laten we een voorbeeld nemen, we hebben deze methode om faculteit van een getal te berekenen met behulp van recursie.
function recursiveFac(n) { if (n === 0) { return 1 } else { return n * recursiveFac(n - 1) }}
deze functie zal prima werken, maar op de lange termijn zal het duur zijn. laten we zeggen dat als het eerst memoFac(7) en dan memoFac(8) aanroept, zonder een cache om onze eerder berekende waarden op te slaan, we het hele proces moeten herhalen, waarbij we de functie nog eens 7 keer moeten retourneren.
const cache = {}function memoFac(n) { if (cache) { return cache } else { if (n === 0) { cache = 1 } else { cache = n * memoFac(n - 1) } return cache}
dus we hebben een andere functie memoFac () en global cache object die het resultaat voor die sleutel zal opslaan.
als we memoFac(8) aanroepen nadat we memoFac(7) hebben aangeroepen, hebben we onze berekende waarde voor factorial(7) al opgeslagen in ons “cache” – object, dat buiten de functie is verplaatst om zijn cachingberekeningen te behouden. We hoeven de functie dus maar één keer aan te roepen, bereken 8 * memoFac(7), die ons rechtstreeks naar onze “cache” stuurt om de waarde in de cache op te halen. Geweldig!
maar wacht-als memoization hetzelfde algemene formaat volgt (waarden ophalen uit een cache in de outer scope van de functie, of de waarde berekenen met behulp van de anonieme afsluitfunctie), kunnen we dan geen algemene memoize functie schrijven? Ja, dat kunnen we!
het concept van memoization in JavaScript is grotendeels gebaseerd op twee concepten.
- sluitingen
- hogere-orde functies
function memoizerHoc(fun){ let cache = {} return function (n){ if (cache != undefined ) { return cache } else { let result = fun(n) cache = result return result } }}
hier hebben we HOC functie memoizerHoc () en een lokale variabele cache die toegankelijk kan zijn binnen de geretourneerde functie (sluiting).