O que é armazenamento de imagens em cache?
O armazenamento de imagens em cache guarda respostas de imagem obtidas ou geradas para que solicitações posteriores possam reutilizá-las, geralmente em um navegador ou em um nó de borda de uma CDN próximo de quem visualiza a imagem. Assim, uma solicitação repetida evita a transferência da origem ou o trabalho de transformação enquanto a entrada não tiver sido removida ou invalidada e sua política de validade ainda permitir a reutilização.
Como funciona o armazenamento de imagens em cache
O armazenamento de imagens em cache pode ocorrer em um navegador, uma aplicação, um serviço de transformação, uma CDN ou em várias camadas ao mesmo tempo. O objeto reutilizável pode ser um arquivo original ou uma versão derivada selecionada por dimensões, recorte, densidade, qualidade e formato negociado. Uma chave e uma política de validade bem definidas permitem que solicitações de transformação idênticas convirjam para um único resultado, enquanto a validação ou a invalidação reconecta esse resultado às alterações no arquivo de origem.
Informações essenciais
- O que deve fazer parte da chave de cache? Todo valor da solicitação que altera a resposta, e nenhum que não a altera. Para um endpoint de transformação, isso inclui pelo menos toda entrada que altera os bytes de saída: omitir o modo de recorte, o ponto focal, a orientação ou a qualidade pode retornar uma versão derivada válida, mas incorreta, enquanto incluir valores que não afetam a resposta armazena duplicatas e reduz a taxa de acertos de cache. Confira por onde seus parâmetros passam, pois os padrões das CDNs variam: a chave de cache padrão do Amazon CloudFront é o nome de domínio da distribuição e o caminho da URL, portanto
?w=300e?w=600compartilham um único objeto em cache até que uma política de cache adicione a string de consulta; a chave padrão da Cloudflare inclui a string de consulta completa; os buckets de backend do Google Cloud CDN incluem por padrão apenas os parâmetros de consulta conhecidos pelo Cloud Storage, e os demais são adicionados por uma lista de inclusão. - A negociação de formato com base em
Acceptexige que cada cache diferencie suas entradas por esse valor. Se uma URL retorna AVIF, WebP ou JPEG dependendo do cabeçalhoAcceptda solicitação, envieVary: Acceptpara que cada cache no caminho saiba que a resposta depende desse cabeçalho e confirme que sua CDN realmente mantém os formatos separados, pelo tratamento deVaryou por uma chave explícita de formato; caso contrário, um cache pode entregar a um cliente uma codificação escolhida para outro cliente. Uma chave apenas na CDN não informa nada aos caches posteriores à CDN. O suporte varia. A Cloudflare não consideraVarypor padrão, exceto paraAccept-Encoding, e oferece uma configuração separada chamada Vary for Images. O Google Cloud CDN respeitaVary: Accepte mantém uma entrada separada para cada valor distinto deAccept, mas não permite configurarAcceptcomo cabeçalho da chave de cache porque ele tem muitos valores. Colocar o formato na URL evita essa dependência; o navegador pode então escolher, por exemplo, entre as fontes de um elementopicture, cada uma declarando umtype. - Substituir um original no mesmo caminho não altera a URL de nenhum arquivo derivado, portanto cada cache que contém um deles pode continuar a servi-lo até que a entrada seja expurgada ou expire e seja revalidada; uma política que permite servir conteúdo desatualizado, como
stale-while-revalidate, prolonga ainda mais esse período. Se expurgar o original também remove suas variantes depende do provedor: o Fastly Image Optimizer expurga o original e todas as variantes em uma única solicitação, e as transformações de imagem da Cloudflare expurgam as versões otimizadas de uma imagem quando a URL do original é expurgada, e não individualmente. Quando os arquivos derivados são armazenados em cache como URLs independentes sem esse vínculo, use o expurgo por tag, prefixo ou URL explícita que o provedor oferece. Um expurgo na CDN não alcança os caches dos navegadores. Uma nova URL de arquivo derivado contorna todos os caches, inclusive o do navegador: coloque uma versão ou um hash do conteúdo da origem no caminho ou em um parâmetro de consulta que faça parte da chave de cache e faça as páginas referenciarem a nova URL. Se a camada de transformação também armazena o original em cache, como faz a da Cloudflare, expurgue ou versione a origem também, ou o novo arquivo derivado poderá ser criado a partir da imagem antiga. - Uma variante em cache não é um arquivo armazenado. O cache de um navegador só volta a servir o mesmo usuário, portanto um serviço de transformação que não mantém uma cópia de sua saída depende de um cache compartilhado à sua frente, normalmente uma CDN, para evitar repetir o trabalho para outras pessoas. Uma CDN pode remover uma entrada antes que ela expire para abrir espaço para outro conteúdo, e cada localidade de borda preenche seu próprio cache, portanto a origem ou o serviço de transformação precisa conseguir produzir qualquer variante novamente a qualquer momento, e o original precisa permanecer disponível. Uma solicitação que nenhuma camada de cache consegue atender incorre novamente no custo de obtenção e transformação, e cada variante é uma entrada separada: a Cloudflare, por exemplo, armazena em cache separadamente cada combinação única de imagem de origem e parâmetros. Uma camada anterior pode atenuar isso quando a CDN oferece uma; o Fastly Image Optimizer armazena a imagem transformada em cache tanto em sua camada de proteção quanto na borda.
Quando o armazenamento de imagens em cache é importante
Armazene variantes transformadas em cache para reduzir a latência, a carga de processamento e o uso de largura de banda quando dimensões e formatos se repetem. Inclua as entradas da transformação na chave, ou uma variante poderá ser servida para outra solicitação.
Como a Transloadit ajuda com o armazenamento de imagens em cache
O Smart CDN da Transloadit é uma camada de transformação de imagens com esse armazenamento em cache integrado. Uma URL tlcdn.com identifica o Workspace, o Template, o caminho do arquivo de origem e os parâmetros de transformação. Na ausência de resultado no cache, a Assembly do Template é executada e o resultado é armazenado em cache; em um acerto de cache, o nó de borda responde sem executá-la novamente. Cada seleção de parâmetros corresponde a uma URL diferente e, portanto, a uma versão derivada armazenada separadamente em cache, e o Robot /file/serve define por quanto tempo os navegadores e a CDN mantêm um resultado.
O Smart CDN é documentado como uma camada de transformação e entrega, não como armazenamento: mantenha os originais no seu próprio armazenamento. As páginas vinculadas não descrevem uma operação de expurgo nem o que acontece com um resultado em cache quando um original é substituído sem alterar o caminho; teste esse caso no seu próprio Workspace antes de depender desse comportamento.
Fontes
- RFC 9111, seção 4.1: cálculo de chaves de cache com o campo de cabeçalho Vary
- MDN: referência do cabeçalho Vary
- Amazon CloudFront: entender a chave de cache
- Cloudflare: chaves de cache (chave padrão e chaves personalizadas)
- Cloudflare: servir conteúdo personalizado (Vary for Images)
- Google Cloud CDN: visão geral do armazenamento em cache (chaves de cache, cabeçalhos Vary, conteúdo desatualizado, remoção de entradas)
- Referência do Fastly Image Optimizer: armazenamento em cache na camada de proteção e expurgo de imagens com suas variantes
- Cloudflare Images: armazenamento em cache e expurgo de imagens otimizadas
- MDN: armazenamento em cache HTTP (versionamento de URLs para imagens e outros sub-recursos)
- MDN: o elemento picture (o atributo type em suas fontes)