Eu gostaria de saber qual é a diferença real entre caching
e memoization
.
A meu ver, ambos envolvem evitar chamadas de função repetidas para obter dados armazenando-os .
Qual é a principal diferença entre os dois?
Eu gostaria de saber qual é a diferença real entre caching
e memoization
.
A meu ver, ambos envolvem evitar chamadas de função repetidas para obter dados armazenando-os .
Qual é a principal diferença entre os dois?
Respostas:
Memoização é uma forma específica de armazenamento em cache que envolve o armazenamento em cache do valor de retorno de uma função com base em seus parâmetros .
Cache é um termo mais geral; por exemplo, o cache HTTP é cache, mas não memoization.
Wikipedia diz :
Embora relacionada ao armazenamento em cache, a memoização se refere a um caso específico dessa otimização, distinguindo-a das formas de armazenamento em cache, como armazenamento em buffer ou substituição de página.
If-Match
e vencimentos. Memoização só faz sentido para funções puras, o que o HTTP raramente é.
Como já vi serem usados, "memoização" é "armazenar em cache o resultado de uma função determinística" que pode ser reproduzida a qualquer momento com a mesma função e entradas.
"Cache" inclui basicamente qualquer estratégia de buffer de saída, seja o valor de origem reproduzível ou não em um determinado momento. Na verdade, o cache também é usado para se referir a estratégias de buffer de entrada , como o cache de gravação em um disco ou memória. Portanto, é um termo muito mais geral.
Acho que o termo cache é geralmente usado quando você armazena resultados de operações de E / S, ou basicamente qualquer dado que chega até você de fora (arquivos, rede, consultas de banco de dados). Memoização de termos geralmente se aplica ao armazenamento de resultados de seus próprios cálculos, por exemplo, no contexto de programação dinâmica.
Memoização é uma forma especial de armazenar em cache o resultado de uma função determinística. Isso significa que armazenar em cache o resultado fora da função não é memoização porque a função teria que sofrer mutação no cache ao calcular um novo resultado (ainda não no cache) para que não fosse mais uma função (pura). A memorização geralmente implica em passar o cache como um argumento adicional (em uma função auxiliar). A memorização otimizará funções que precisam computar valores várias vezes para um único acesso. O armazenamento em cache otimizará funções que são chamadas várias vezes com os mesmos parâmetros. Em outras palavras, a Memoização otimizará o primeiro acesso se o armazenamento em cache otimizará apenas os acessos recorrentes.