Hoje vamos mergulhar no cache de funções em Javascript. Leia novamente: CACHING. Não pegando , de try
e catch
, pois acho que há recursos suficientes na web que cobrem esse tópico. Vamos ver o Cache, a partir do Cache, como quando seu navegador armazena conteúdo carregado anteriormente.
O que é cache de funções?
Caching de funções, ou apenas Caching, significa o uso de memoização para economizar tempo de processamento em nossos programas. Normalmente, isso significa que temos algum tipo de estrutura de dados que salva os resultados anteriores para que não os calculemos novamente. Visto que as funções do Javascript se comportam como objetos, podemos usar as próprias funções em vez de recursos externos.
Exemplo 1]
function isPrime( num ) {
if ( isPrime.cache[ num ] != null )
return isPrime.cache[ num ];
var prime = num != 1; // Everything but 1 can be prime
for ( var i = 2; i < num; i++ ) {
if ( num % i == 0 ) {
prime = false;
break;
}
}
isPrime.cache[ num ] = prime
return prime;
}
isPrime.cache = {};
O problema é (trocadilho intencional) que as funções podem ter propriedades como objetos. No nosso caso, adicionamos uma cache
propriedade que é um objeto. Um Objeto, devido à sua natureza em Javascript, pode funcionar como uma Tabela Hash (na verdade, mais como um mapa ou dicionário, mas você entendeu) e assim trabalhar renderizar a função de uma estrutura de dados Cache.
Uso deste recurso
- Buscando dados de um servidor : na maioria das vezes você tem uma função que recupera informações de um servidor. Se você tiver uma cópia em cache dele, não precisará acessar o servidor novamente. Você também pode adicionar propriedades como
lastTimeCalled
para salvar um carimbo de data / hora em quando foi chamado e só realizar a chamada quando o horário atual for maior do que o carimbo de data / hora do cache. - Implementando uma função Memento Pattern : Em vez de ter um objeto cache, tenha um cache Array (Stack). Empurre e exiba os resultados de suas chamadas para manter os estados dos resultados; por meio de uma interface, você pode fornecer um recurso de “Desfazer” ou “Restaurar” do lado do cliente sem precisar acessar um servidor.
- Enfileiramento de mensagens : se sua função está sendo chamada
timeouts
, você pode armazenar análises a partir dela ou até mesmo chamadas recursivas por meio de uma fila de cache. Você pode até mesmo fazer com que um Web Worker verifique sua Fila de vez em quando e execute ações de acordo com o que encontrar na fila.
Obviamente, isso não substitui recursos mais poderosos, como o recurso LocalStorage do HTML5, já que é armazenado no Javascript Memory Runtime. Isso significa que ele desaparecerá assim que alguém atualizar o navegador. No entanto, isso tem os benefícios de encapsular o cache como parte da função, enquanto outras soluções requerem a criação de variáveis externas, aumentando assim a dependência.
[1] Da página de John Resig