Pergunta

É comum querer navegadores para recursos de cache -. JavaScript, CSS, imagens, etc., até que haja uma nova versão disponível, e em seguida, garantir que as buscas do navegador e armazena em cache a nova versão em vez

Uma solução é incorporar um número de versão no nome do arquivo do recurso, mas irá colocar os recursos a serem gerenciados dessa forma em um diretório com um número de revisão no que fazer a mesma coisa? É toda a URL para o arquivo usado como uma chave no cache do navegador, ou é apenas o próprio nome de arquivo e alguns meta-dados?

Se minhas alterações de código de buscar /r20/example.js para /r21/example.js, posso ter certeza de que a revisão 20 de example.js foi armazenada em cache, mas agora revisão 21 tem sido buscada vez e agora está em cache?

Foi útil?

Solução

Sim, qualquer alteração no qualquer parte do URL (excluindo protocolos HTTP e HTTPS muda) é interpretado como um recurso diferente pelo navegador (e quaisquer proxies intermediários), e, assim, resultar em uma entidade separada no navegador-cache.

Update:

O pedido em este artigo ThinkVitamin que o Opera e Safari / Webkit navegadores não URLs de cache com? query = cordas é false .

Adicionando um parâmetro de número de versão para um URL é uma maneira perfeitamente aceitável para fazer de impedimento de cache.

O que pode ter confundido o autor do artigo ThinkVitamin é o fato de que pressionar Enter na barra de endereço / localização no Safari e Opera resulta em um comportamento diferente para URLs com string de consulta em si.

No entanto, ( e esta é a parte mais importante! ) Opera e Safari se comportam exatamente como IE e Firefox quando vem ao cache incorporado / imagens vinculadas e folhas de estilo e scripts em páginas da web - "?", independentemente de terem ou não caracteres em suas URLs. (Isto pode ser verificado com um simples teste em um servidor normal de Apache.)

(eu teria comentado sobre a resposta atualmente aceita se eu tinha a reputação de fazê-lo: -).

Outras dicas

chave de cache do navegador é uma combinação do método de solicitação e de recursos URI. URI consiste de esquema, autoridade, caminho, consulta e fragmento.

trecho relevante de HTTP especificação 1.1 :

A chave cache principal consiste no método de solicitação e alvo URI. No entanto, uma vez HTTP caches em uso comum hoje em dia são tipicamente limitadas a cache de respostas para obter, muitas caches simplesmente recusar outros métodos e usar apenas o URI como a chave de cache primário.

trecho relevante de URI especificação :

A sintaxe URI genérico consiste em uma seqüência hierárquica de componentes referidos como o esquema, autoridade, caminho, consulta e fragmento.

URI         = scheme ":" hier-part [ "?" query ] [ "#" fragment ]

hier-part   = "//" authority path-abempty
              / path-absolute
              / path-rootless
              / path-empty

Estou 99,99999% de certeza que é toda a url que é usado para recursos de cache em um navegador, para que o seu esquema de URL deve funcionar muito bem.

O mínimo que você precisa para identificar um objeto HTTP é pelo caminho completo, incluindo todos os parâmetros de consulta cordas. Alguns navegadores podem não cache de objetos com um string de consulta, mas que não tem nada a ver com a chave para o cache.

Também é importante lembrar que o caminho não é mais suficiente. O Vary:. Cabeçalho nos alertas de resposta HTTP do navegador (ou servidor proxy, etc.) de qualquer coisa que não seja o URL que deve ser usado para determinar a chave de cache, tais como cookies, valores que codificam, etc

Para a sua pergunta básica, sim, mudar a URL do arquivo .js é sufficent. A questão maior do que determina a chave de cache, é o URL mais o Vary:. Restrições de cabeçalho

Sim. Um caminho diferente é o mesmo a partir da perspectiva caches.

É claro que tem que usar o caminho inteiro '/r20/example.js' vs '/r21/example.js' poderia ser completamente diferentes imagens para começar. O que você sugere é uma maneira viável de controle de versão alça.

Na maioria dos navegadores é usada a URL completa. Em alguns navegadores, se você tem uma consulta no URL, o documento nunca será armazenada em cache.

url inteira. Eu vi um comportamento estranho em alguns navegadores mais antigos, onde a sensibilidade caso entrou em jogo.

Além das respostas existentes Eu só quero acrescentar que talvez não se aplicam se você usar ServiceWorkers ou por exemplo desligada-plugin. Então você pode experimentar regras de cache diferentes, dependendo de como as ServiceWorkers são criadas.

depende. que é suposto ser o URL completo, mas alguns navegadores (Opera, Safari 2 ) aplicar uma estratégia de cache diferente para urls com diferentes parâmetros.

melhor aposta é a de mudar o nome do arquivo .

Há uma solução muito inteligente aqui (usa PHP, Apache)

http://verens.com/archives/ 2008/04/09 / javascript-cache-resolvido de problemas /

Notas Estratégia: “De acordo com a letra da especificação HTTP caching, os agentes deveriam nunca URLs de cache com seqüências de consulta. Enquanto o Internet Explorer e Firefox ignorar este, Opera e Safari não fazer - para se certificar de todos os agentes de usuário podem armazenar em cache seus recursos, precisamos manter consulta cordas fora de seus URLs “

.

http://www.thinkvitamin.com/features/webapps/serving -javascript-rápido

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top