o que é Memoização
Memoização é uma técnica de otimização que acelera os aplicativos armazenando os resultados de chamadas de função caras e retornando o resultado em cache quando as mesmas entradas são fornecidas novamente.
vamos dar um exemplo, temos este método para calcular fatorial de um número usando recursão.
function recursiveFac(n) { if (n === 0) { return 1 } else { return n * recursiveFac(n - 1) }}
esta função funcionará bem, mas a longo prazo, será cara. digamos que se chama primeiro memoFac(7) e, em seguida, memoFac(8), Sem um cache para armazenar nossos valores calculados anteriormente, temos que repetir todo o processo, devolvendo a função mais 7 vezes.
const cache = {}function memoFac(n) { if (cache) { return cache } else { if (n === 0) { cache = 1 } else { cache = n * memoFac(n - 1) } return cache}
portanto, temos outra função memoFac() e objeto de cache global que armazenará o resultado dessa chave.
agora, se chamarmos memoFac (8) Depois de chamarmos memoFac(7), já salvamos nosso valor calculado para fatorial(7) em nosso objeto “cache”, que foi movido para fora da função para manter seus cálculos de cache. Assim, só precisamos chamar a função uma vez, calcular 8 * memoFac(7), que nos envia direto para o nosso “cache” para recuperar o valor em cache. Da hora!
mas espere — se a memoização seguir o mesmo formato geral (recuperando valores de um cache no escopo externo da função ou calculando o valor usando a função de fechamento anônimo), não poderíamos escrever uma função de memoize geral? Sim, podemos!
o conceito de memoização em JavaScript é construído principalmente em dois conceitos.
- Fechamentos
- Funções de Ordem Superior
function memoizerHoc(fun){ let cache = {} return function (n){ if (cache != undefined ) { return cache } else { let result = fun(n) cache = result return result } }}
Aqui temos HOC função memoizerHoc() e uma variável local de cache que pode ser acessado dentro da função retornada (encerramento).