What is Memoization
Memoization on optimointitekniikka, joka nopeuttaa sovelluksia tallentamalla kalliiden funktiokutsujen tulokset ja palauttamalla välimuistiin tallennetun tuloksen, kun samat tulot toimitetaan uudelleen.
Otetaanpa esimerkki, meillä on tämä menetelmä laskea luvun faktori rekursion avulla.
function recursiveFac(n) { if (n === 0) { return 1 } else { return n * recursiveFac(n - 1) }}
tämä toiminto toimii hyvin, mutta pitkällä aikavälillä, se on kallista. sanotaan, jos se kutsuu ensin memoFac (7) ja sitten memoFac(8), Ilman välimuisti tallentaa meidän aiemmin lasketut arvot, meidän täytyy toistaa koko prosessi, palauttamalla funktio vielä 7 kertaa.
const cache = {}function memoFac(n) { if (cache) { return cache } else { if (n === 0) { cache = 1 } else { cache = n * memoFac(n - 1) } return cache}
joten meillä on toinen funktio memoFac () ja global cache-objekti, joka tallentaa tuloksen kyseiselle avaimelle.
jos nyt kutsumme memofacia (8) sen jälkeen, kun olemme kutsuneet memofacia(7), olemme jo tallentaneet factorialille(7) lasketun arvomme ”cache” – objektiimme, joka on siirretty funktion ulkopuolelle säilyttääkseen välimuistilaskelmansa. Näin, meidän tarvitsee vain soittaa funktio kerran, laskea 8 * memoFac (7), joka lähettää meidät suoraan meidän ”välimuisti” hakea välimuistissa arvo. Mahtavaa!
mutta odota-jos memoization noudattaa samaa yleistä muotoa (noudetaan arvoja välimuistista funktion uloimmalla soveltamisalalla, tai lasketaan arvo käyttämällä anonyymiä sulkufunktiota), emmekö voisi kirjoittaa yleistä muistiofunktiota? Kyllä voimme!
JavaScriptin muisteloinnin käsite rakentuu pitkälti kahden käsitteen varaan.
- lakkautukset
- korkeamman kertaluvun funktiot
function memoizerHoc(fun){ let cache = {} return function (n){ if (cache != undefined ) { return cache } else { let result = fun(n) cache = result return result } }}
tässä meillä on HOC-funktio memoizerHoc () ja paikallinen muuttuja välimuisti, joka on käytettävissä palautetun toiminnon (sulkeminen) sisällä.