Quais são as regras rígidas e rápidas para o Controle de Cache?

15

Confissão : os sites que mantenho têm regras diferentes para o Controle de cache, com base principalmente na configuração padrão do servidor, seguida de recomendações dos plug-ins Page Speed e Y-Slow Firefox e da exibição Recursos de rede no Speed ​​Tracer do Google . O Controle de cache é definido como privado / público, dependendo do que eles dizem fazer, os cabeçalhos do ETag / Last-Modified só serão modificados se o Y-Slow sugerir que algo está errado e a Vary-Accept-Encoding parecer necessária ao compactar manualmente os arquivos do Amazon CloudFront.

Ao ler o material sobre as diferentes opções e o que elas fazem, parece haver informações conflitantes, regras para proxies quebrados e configurações de culto à carga . Qualquer informação oficial fornecida pelas ferramentas de análise mencionadas acima é bastante inacessível, pois lida com cada tópico individualmente e não como uma estratégia unificada (portanto, não há referência cruzada de técnicas).

Por exemplo, parece não fazer sentido que as ferramentas de análise de velocidade classifiquem um site com ETag da mesma forma que um site sem eles, se elas tiverem o objetivo de ajudar no cache.

Quais são as regras rígidas e rápidas para uma estratégia independente de controle de cache da plataforma?

EDITAR:

A ligação através de artigo de Jeff Atwood explica Caching em soberba profundidade.

Para o registro, porém, aqui estão as regras rígidas e rápidas:

Se o arquivo for compactado usando GZIP, etc - use "cache-control: private" como proxy pode retornar a versão compactada para um cliente que não o suporta (o cache do navegador mantém os arquivos marcados dessa maneira). Lembre-se também de incluir um "Vary: Accept-Encoding" para dizer que é compressível.

Use Last-Modified em conjunto com o ETag - o uso de correias e chaves fornece os dois validadores, enquanto o ETag é baseado no conteúdo do arquivo em vez do tempo de modificação sozinho, o uso de ambos abrange todas as bases. NOTA: O PageTest da AOL tem uma abordagem de carta branca contra ETags por algum motivo. Se você estiver usando o Apache em mais de um servidor para hospedar o mesmo conteúdo, remova o inode declarado implicitamente do ETags, excluindo-o da diretiva FileETag (ou seja, "Tamanho do arquivo FileETag MTime"), a menos que você esteja realmente usando o mesmo sistema de arquivos ativo.

Use "cache-control: public" sempre que puder - isso significa que os servidores proxy (e o cache do navegador) retornarão seu conteúdo, mesmo que o restante da página precise de autenticação HTTP, etc.

Metalshark
fonte

Respostas:

8

Primeiro, não se livre do ETag como o Yahoo diz, a menos que você esteja usando um farm / cluster de servidores. Contanto que o mesmo arquivo sempre retorne o mesmo ETag quando não for alterado, será uma diretiva muito útil.

Quanto a outros cabeçalhos, as práticas recomendadas do Yahoo sugerem definir um Expirescabeçalho para um futuro muito distante para arquivos estáticos, usado Cache-Controlpara conteúdo dinâmico. No entanto, Cache-controlé perfeitamente adequado para conteúdo estático (praticamente nenhuma diferença entre eles).

Ao alterar arquivos estáticos em cache, você precisará alterar o nome do arquivo ou adicionar um parâmetro exclusivo ao final, por exemplo example.com/styles.css?v=2. É preferível alterar o nome do arquivo real, conforme observado nos comentários abaixo.

Aliás, você pode editar as regras YSlow ao seu gosto, para remover a regra Etag e adicionar seu próprio domínio como uma CDN. Este artigo também é uma boa leitura: Os problemas do Yahoo não são seus problemas

DisgruntledGoat
fonte
O ETag fez sentido no Apache executando "FileETag MTime Size" em vez do padrão, que inclui o inode (por FS, portanto, não confiável) no Y-Slow. No entanto, as recomendações sobre as melhores práticas do Yahoo são um pouco confusas quando comparadas às do Page Speed. Por exemplo, ele diz usar o Controle de cache apenas em páginas dinâmicas (como você também sugere), mas o Google sugere o uso de Controle de cache: público em CSS estático e Controle de cache: privado em arquivos do Amazon Cloudfront com GZip manualmente.
22410 Metalshark
É difícil saber o que fazer com esse conselho para proxies. O Google apenas diz "Alguns proxies públicos têm bugs ...", mas não diz quão prevalente isso é. É aconselhável definir o cabeçalho Vary: Accept-Encoding, consulte a parte inferior de code.google.com/speed/page-speed/docs/caching.html
DisgruntledGoat
A adição de um parâmetro de consulta desativa o armazenamento em cache desse arquivo completamente em alguns navegadores. Portanto, você pode optar pela abordagem "alterar o nome do arquivo", comoexample.com/style_v2.css
Evgeny
@ Evgeny: Quais navegadores? Já ouvi isso antes, mas nunca vi um navegador que realmente não armazene em cache o arquivo (especialmente se você tiver os cabeçalhos corretos).
usar o seguinte
@DisgruntledGoat, na verdade, depois de algumas pesquisas, parece que é uma relíquia da era http / 1.0, onde fazia parte das especificações que realmente disseram que o agente do usuário não deve armazenar em cache os ativos que possuem sequências de consulta. Por outro lado, code.google.com/speed/page-speed/docs/caching.html afirma que são os proxies (squid <3.0) que não armazenam em cache os ativos e, portanto, o uso de cadeias de consulta para impedir o cache é desencorajado.
Evgeny
0

Alterar os cabeçalhos de solicitação de seus recursos para usar o cache Para a maioria das pessoas, o caminho para o cache estável é adicionar algum código a um arquivo chamado .htaccess no seu host / servidor da web.

Isso significa ir ao gerenciador de arquivos (ou onde quer que você adicione ou faça upload de arquivos) no seu host.

O arquivo .htaccess controla muitas coisas importantes para o seu site. Se você não estiver familiarizado com o arquivo .htaccess, leia meu artigo sobre como trabalhar com .htaccess para saber um pouco antes de alterá-lo.

O código abaixo informa aos navegadores o que armazenar em cache e quanto tempo "lembrar" dele. Ele deve ser adicionado à parte superior do seu arquivo .htaccess.

## EXPIRES CACHING ##
<IfModule mod_expires.c>
ExpiresActive On
ExpiresByType image/jpg "access 1 year"
ExpiresByType image/jpeg "access 1 year"
ExpiresByType image/gif "access 1 year"
ExpiresByType image/png "access 1 year"
ExpiresByType text/css "access 1 month"
ExpiresByType text/html "access 1 month"
ExpiresByType application/pdf "access 1 month"
ExpiresByType text/x-javascript "access 1 month"
ExpiresByType application/x-shockwave-flash "access 1 month"
ExpiresByType image/x-icon "access 1 year"
ExpiresDefault "access 1 month"
</IfModule>
## EXPIRES CACHING ##

Salve o arquivo .htaccess e atualize sua página da web.

Fonte:
https://varvy.com/pagespeed/leverage-browser-caching.html

Nomib Nomib
fonte
Quase todos os exemplos de ExpiresByTypediretivas que vejo incluem o tipo MIME text/x-javascript- seu servidor está realmente respondendo a esse tipo de conteúdo ?! (Um exemplo de cópia
oculta