O que é cache? Um guia simples para criadores de apps
Cache significa manter uma cópia pronta de algo que era lento ou caro de obter, para que o pedido seguinte a isso possa ser respondido depressa a partir dessa cópia. A cópia guardada chama-se cache. O seu navegador faz cache de imagens para que um site carregue mais depressa na segunda visita; um servidor faz cache do resultado de uma consulta lenta à base de dados para não a executar para cada visitante.
A cache torna as apps mais rápidas e mais baratas de executar. O seu grande compromisso é que uma cópia pode ficar desatualizada.
Porque é que a cache importa quando cria com IA
Vai encontrar a cache em apps criadas com IA de três formas:
- «Atualizei a app mas continuo a ver a versão antiga.» É o momento mais comum de cache, e normalmente é inofensivo — o navegador ou uma CDN está a mostrar uma cópia guardada.
- Velocidade. Se uma página está lenta porque recalcula os mesmos números para cada visitante, guardar o resultado em cache pode fazê-la parecer instantânea.
- Custo. Muitos criadores e alojamentos cobram por computação, tempo de base de dados e chamadas a APIs externas. Se mil visitantes desencadeiam o mesmo pedido caro, a cache permite pagar só uma vez.
Conhecer o básico permite pedir cache onde ajuda e reconhecê-la quando é a razão de algo parecer errado.
Uma analogia do dia a dia
Pense na cozinha de um café movimentado.
Todas as manhãs, o chef podia preparar cada café com grãos acabados de moer assim que é pedido. Isso é lento. Em vez disso, deixa um bule de café de filtro pronto na placa. A maioria dos clientes recebe uma chávena em segundos — isso é um acerto na cache. Quando o bule acaba, alguém prepara um novo — um erro na cache.
Mas o café que fica muito tempo perde qualidade, por isso o café tem uma regra: deitar fora qualquer bule com mais de 30 minutos. Essa regra é o tempo de validade da cache. Ninguém manteria o mesmo bule o dia todo, e ninguém pré-prepararia o pedido personalizado de alguém com leite de aveia e três açúcares — algumas coisas não devem ser guardadas de todo.
Onde vivem as caches
Um único carregamento de página pode passar por várias caches, desde a mais próxima do utilizador até à mais distante:
| Cache | Onde fica | O que normalmente guarda | Exemplo |
|---|---|---|---|
| Cache do navegador | No dispositivo do visitante | Imagens, folhas de estilo, scripts, tipos de letra | O seu logótipo aparece instantaneamente na segunda página |
| Cache de CDN | Servidores espalhados pelo mundo, perto dos visitantes | Ficheiros estáticos e, por vezes, páginas inteiras | Um visitante em Tóquio recebe os ficheiros de um servidor próximo, não da sua origem |
| Cache da aplicação | No servidor ou junto a ele, muitas vezes em memória ou Redis | Resultados de consultas lentas ou de chamadas a APIs externas | Taxas de câmbio do dia, obtidas uma vez por hora |
| Cache da base de dados | Dentro da base de dados | Dados usados recentemente e planos de consulta | Linhas populares ficam na memória rápida |
Uma CDN (rede de distribuição de conteúdos) é essencialmente uma rede mundial de caches para os ficheiros do seu site.
Como uma cache decide o que guardar
Cada cache tem de responder às mesmas perguntas:
- O que pode ser guardado? Dados públicos e partilhados (a imagem de um produto, um artigo do blogue) — sim. Dados privados (a página de conta de um utilizador, as suas mensagens) — nunca numa cache partilhada.
- Durante quanto tempo? Este é o TTL (time to live, tempo de vida). Um logótipo pode ficar em cache um ano; um nível de stock, 30 segundos.
- Como é atualizada? Ou a cópia expira e é buscada de novo, ou a app remove-a de propósito quando os dados mudam — chamado invalidação.
Nos sites, o servidor indica aos navegadores e às CDN como guardar cada ficheiro, através do cabeçalho Cache-Control. Por exemplo, Cache-Control: max-age=3600 significa «pode reutilizar esta cópia durante uma hora».
As ferramentas de build modernas tratam da parte mais difícil nos ficheiros estáticos com cache busting: sempre que um ficheiro muda, recebe um novo nome com uma impressão digital, como app.3f9a2c.js. Os navegadores podem guardar o nome antigo durante muito tempo, porque a nova versão simplesmente tem outro nome.
Um exemplo prático: um catálogo de produtos
Tem uma pequena loja online. A página inicial mostra 50 produtos com preços e níveis de stock vindos da base de dados, mais uma lista de «em destaque» que exige um cálculo lento sobre todas as encomendas.
- Imagens e scripts são guardados em cache pelo navegador e pela CDN durante muito tempo. Cada nova build dá novos nomes aos ficheiros alterados, por isso as atualizações continuam a aparecer.
- A lista de destaques é calculada de 10 em 10 minutos e guardada numa cache da aplicação. Todos os visitantes desses 10 minutos recebem o resultado guardado instantaneamente.
- Os preços ficam em cache durante pouco tempo, e a cache é limpa sempre que edita um produto, para que os clientes nunca vejam um preço antigo durante muito tempo.
- O stock no checkout nunca é guardado em cache. Quando alguém clica em «Comprar», a app verifica a base de dados real, por isso não pode vender um artigo que acabou de se esgotar.
- As páginas do carrinho e da conta nunca são guardadas em caches partilhadas, porque são pessoais.
O resultado: a página inicial é rápida, a base de dados faz muito menos trabalho e nada que importe para dinheiro ou privacidade fica desatualizado.
Termos-chave
| Termo | Significado |
|---|---|
| Acerto / erro na cache | Os dados foram encontrados na cache / tiveram de ser buscados à origem. |
| TTL (time to live) | Durante quanto tempo uma cópia guardada é considerada atual. |
| Dados desatualizados (stale) | Uma cópia guardada que já não está atual. |
| Invalidação | Remover deliberadamente uma cópia guardada porque o original mudou. |
| Cache busting | Mudar o nome ou o URL de um ficheiro quando ele muda, para que as caches busquem a nova versão. |
| Cache-Control | O cabeçalho HTTP que indica aos navegadores e às CDN como guardar uma resposta. |
| Refresh forçado | Recarregar uma página pedindo ao navegador que ignore a cache. |
| Redis | Uma base de dados em memória muito usada, frequentemente como cache da aplicação. |
Ideias erradas comuns
- «A cache é sempre boa.» Guardar a coisa errada em cache causa erros reais: preços antigos, publicações novas em falta ou — o pior caso — a página privada de um utilizador mostrada a outro. Use a cache de forma deliberada.
- «Se vejo a versão antiga, a minha atualização falhou.» Normalmente não falhou. Experimente um refresh forçado (Ctrl+Shift+R, ou Cmd+Shift+R num Mac) ou uma janela privada antes de assumir que algo está partido.
- «A cache resolve uma app lenta.» Só esconde a lentidão em pedidos repetidos. O primeiro pedido continua lento, e se o problema de fundo for um índice em falta na base de dados, corrija também isso.
- «Devo guardar tudo em cache o máximo de tempo possível.» Tempos longos servem para ficheiros que recebem novos nomes quando mudam. Para páginas HTML e dados, tempos mais curtos são mais seguros.
- «Limpar a minha cache resolve para toda a gente.» Limpa apenas o seu navegador. Os visitantes e as caches das CDN continuam com as suas próprias cópias.
O que pedir ao seu criador com IA
- «Quais as partes desta app que são lentas e quais podem ser guardadas em cache em segurança?»
- «Guarda em cache a [lista de destaques / resposta da API] durante [N] minutos, e limpa-a quando os dados subjacentes mudarem.»
- «Garante que nenhuma página com dados pessoais ou de conta pode ser guardada em cache por uma CDN ou por uma cache partilhada.»
- «Define tempos de cache longos para ficheiros estáticos com impressão digital e curtos para HTML.»
- «Guarda em cache as respostas de [API externa] para não a chamar em cada carregamento de página — e diz-me quão desatualizados podem ficar esses dados.»
- «Vejo uma versão antiga depois de publicar. É a cache do meu navegador, ou alguma coisa não foi implementada?»
Cache no Mythex
Depois de publicar uma atualização numa app do Mythex, a documentação indica que as caches das CDN podem demorar um pouco a atualizar, e que um refresh forçado do URL público mostra a nova versão — veja Como publicar. A página de Limites de alojamento também recomenda a cache de recursos estáticos, já que o alojamento, o tempo de base de dados e a largura de banda são pagos com o seu saldo de créditos. Tudo o que vá além disso — guardar em cache resultados de consultas ou respostas de API — é algo que pede ao agente para construir na sua app.
Leituras relacionadas: o que é uma CDN, como tornar o seu site mais rápido e o que é limitação de pedidos (rate limiting).
Perguntas
O que é cache, em termos simples?
Cache significa guardar uma cópia de algo que era lento ou caro de obter, para que, na próxima vez que for necessário, possa ser servido rapidamente a partir da cópia guardada. Navegadores, CDN, servidores e bases de dados usam caches para tornar as apps mais rápidas e mais baratas de executar.
Porque é que continuo a ver a versão antiga do meu site depois de o atualizar?
É provável que o navegador ou uma CDN esteja a servir uma cópia guardada dos ficheiros antigos. Um refresh forçado (Ctrl+Shift+R no Windows, Cmd+Shift+R no Mac) costuma resolver. Para os visitantes, os sites bem construídos dão novos nomes aos ficheiros atualizados, para que as caches busquem a versão nova automaticamente.
O que faz limpar a cache?
Limpar a cache do navegador apaga as cópias guardadas de ficheiros e páginas, para que tudo seja descarregado de novo na próxima vez. Pode resolver páginas que parecem partidas ou desatualizadas, e as páginas demoram um pouco mais a carregar na primeira vez depois disso.
A cache pode causar problemas?
Sim. O principal risco é servir dados desatualizados — um preço antigo, um nível de stock desatualizado — ou, pior, guardar em cache a página privada de um utilizador e mostrá-la a outra pessoa. Boas regras de cache decidem o que pode ser guardado, durante quanto tempo, e nunca guardam dados pessoais em caches partilhadas.