Parar o cache do Chrome dos meus arquivos JS

136

Farei uma alteração nos meus arquivos JS, mas ele não será realmente alterado no navegador, tenho que renomear os arquivos toda vez para que ele seja recarregado. Existe algum tipo de comando .htaccess que posso adicionar ou algo para impedir o armazenamento em cache?

É até o cache do meu hard core de páginas html. Preciso reabrir meu navegador inteiro apenas para ver as alterações. Poderia ser um problema no servidor?

Howdy_McGee
fonte
A ativação do cabeçalho ETag no servidor da Web faz com que o Chrome faça cache, mas recupera corretamente uma nova cópia do arquivo quando ele foi alterado?
Developer Webs

Respostas:

200

Você pode clicar no ícone de configurações no canto superior direito ...| Mais ferramentas | Ferramentas para desenvolvedores | Rede | Desativar cache (enquanto o DevTools estiver aberto)

Para o Windows, isso é F12ou CTRL + SHIFT + Ienquanto o mac CMD + SHIFT + Iabre o DevTools.

Novo caminho para a Atualização do Chrome em setembro de 2018:

Clique no ícone de configurações no canto superior direito ...| Configurações | preferências | Ferramentas para desenvolvedores | Rede | Desativar cache (enquanto o DevTools estiver aberto)

MartinHN
fonte
4
Grande falha por cromo para ser cache coisas ... mesmo quando a página é marcada com sem cache .... Oh bem, pelo menos isso funciona, os usuários podem sofrer, mas pelo menos eu posso desenvolver
Robert Noack
4
Observe que as "Configurações" não estão mais no canto inferior direito! Clique no menu de três pontos no canto superior direito para acessar as configurações.
yizzlez
4
A localização é: canto superior direito | "..." configurações | Preferências Rede | "Desativar o cache (enquanto DevTools está aberto).
precisa saber é o seguinte
1
Esta é uma prática muito ruim !!! Não, você não deve ter um hack temporário para seu uso .... você deve ter uma solução PERMANENTE para TODOS os seus usuários. A melhor maneira é uma string de consulta aleatória no final do src. src = "someJs.js? someRandomStringCreatedByInlineJsOrServerRenderedCode", o que tornaria a versão sempre atualizada. uma boa sequência aleatória seria pegar a data / hora de hoje e jogá-la lá. pode ser necessário transformá-lo em uma sequência, pois provavelmente será um objeto de data. É realmente muito ruim que essa tenha sido a resposta escolhida e votada com tanto vigor.
1
No Chrome 61.0.3163.100, parece que a opção agora existe em Mais Ferramentas / Condições de Rede. A opção "Ferramentas do desenvolvedor" não existe mais.
Ilia Koulikov 17/10/19
61

Uma maneira mais rápida de fazer isso é clicar com o botão direito do mouse no ícone de atualização ao lado da barra de endereço e escolher Esvaziar cache e recarregar por hardware

Apenas verifique se as ferramentas de desenvolvimento do Chrome estão abertas. (Pressione F12) A propósito ... Esse truque só funciona no Chrome para Windows, Ubuntu e Mac OS

Nicole Rivers
fonte
2
Para sua informação, tentei tudo isso e absolutamente nada funcionou. Na minha máquina (com configurações padrão para o Mountain Lion), F12 mostra o painel.
Aubrey Goodman
2
como é muito melhor que a resposta aceita? Você pode recarregar normalmente com a resposta aceita.
SSH Este
não, você não pode. pelo menos eu não posso. nenhuma das respostas funcionou para mim, ainda exibindo um alerta que é excluído no meu arquivo js local, mas ainda está no arquivo js em cache no chrome.
Burak Karakuş
1
Funciona para mim. Verifique se as ferramentas de desenvolvimento estão abertas, caso contrário, o botão direito do mouse não mostrará o menu.
Venryx
Eu vejo a opção, mas no meu caso, o script não foi atualizado.
Ilia Koulikov 17/10/19
25

Mantenha a tecla Shift pressionada enquanto clica no botão recarregar.

StilesCrisis
fonte
12

add Algo parecido script.js?a=[random Number]com o número aleatório gerado pelo PHP.

Você já tentou expirar = 0, o pragma "no-cache" e "cache-control = NO-CACHE"? (Não sei o que eles dizem sobre scripts).

EGOrecords
fonte
2
Eu me deparei com essa pergunta e estava vasculhando as respostas. Essa é uma péssima idéia, porque: 1) gerar o número aleatório a cada solicitação fará com que os navegadores baixem novamente o arquivo a cada visita. Você deseja um valor de tempo de compilação , para que os navegadores apenas gerem novamente o valor quando você fizer alterações no site. Como o PHP é interpretado em tempo de execução, pode ser necessário fazê-lo no momento da implantação. e 2) gerar um número aleatório significa que, às vezes (com a probabilidade aumentando ao longo do tempo), o navegador realiza uma cópia em cache antiga e aleatória. Se você precisar fazer isso no momento da solicitação, use um carimbo de data e hora!
JakeRobb
Eu estou fazendo isso e usando o número de versão de compilação, com um tempo limite decente (1 dia) sobre o valor cache cabeçalho
Worthy7
11

Algumas idéias:

  1. Quando você atualiza sua página no Chrome, faça uma CTRL + F5 para fazer uma atualização completa.
  2. Mesmo se você definir o vencimento como 0, ele ainda será armazenado em cache durante a sessão. Você precisará fechar e abrir novamente o navegador.
  3. Certifique-se de que, ao salvar os arquivos no servidor, os carimbos de data e hora estejam sendo atualizados. O Chrome emitirá primeiro um HEADcomando, em vez de um GET completo, para verificar se ele precisa baixar o arquivo completo novamente, e o servidor usa o carimbo de data e hora para ver.

Se você deseja desativar o cache no seu servidor, pode fazer algo como:

Header set Expires "Thu, 19 Nov 1981 08:52:00 GM"
Header set Cache-Control "no-store, no-cache, must-revalidate, post-check=0, pre-check=0"
Header set Pragma "no-cache"

Em .htaccess

Mike Christensen
fonte
Teve isso, mas a pré-verificação = 0, pós-verificação = 0 é a adição que fez a diferença para mim.
TadLewis 30/01/19
7

Etapas rápidas:

1) Abra o painel Ferramentas do desenvolvedor acessando o menu Chrome -> Ferramentas -> Ferramentas do desenvolvedor

2) Clique no ícone de configurações no lado direito (é uma engrenagem!)

3) Marque a caixa "Desativar cache (quando o DevTools estiver aberto)"

4) Agora, enquanto o painel estiver ativo, basta clicar em Atualizar e o JS não será armazenado em cache!

StackG
fonte
1
No entanto, não ajuda a depurar usando o WebStorm. Em seguida, o DevTools está aberto. O WebStrom não pode anexar um depurador.
Alexander Volkov
5

O problema é que o Chrome precisa ter must-revalidate no cabeçalho Cache-Control` para verificar novamente os arquivos para ver se eles precisam ser buscados novamente.

Você sempre pode SHIFT-F5 e forçar a atualização do Chrome, mas se desejar corrigir esse problema no servidor, inclua este cabeçalho de resposta:

Cache-Control: must-revalidate

Isso instrui o Chrome a verificar com o servidor e verificar se há um arquivo mais recente. Se houver um arquivo mais recente, ele será recebido na resposta. Caso contrário, ele receberá uma resposta 304 e a garantia de que a que está no cache está atualizada.

Se você NÃO definir esse cabeçalho, na ausência de outra configuração que invalide o arquivo, o Chrome nunca verificará com o servidor se há uma versão mais recente.

Aqui está uma postagem de blog que discute mais a questão.

AgilePro
fonte
1
Eu acho que deveria ser em Cache-Control: must-revalidatevez de Cache-Control: must-validate. Eu não acho que este último seja válido.
László Monda
3

Ao fazer atualizações nos meus aplicativos da Web, usarei um manipulador para retornar um único arquivo JS para evitar os hits em massa no meu servidor ou adicionar uma pequena string de consulta a eles:

<script type="text/javascript" src="/mine/myscript?20111205"></script>
Ryan Ternier
fonte
2
Embora isso pareça uma prática engenhosa, você pode ter problemas com alguns proxies que deixarão de armazenar em cache quando encontrarem uma string de consulta: developers.google.com/speed/docs/best-practices/…
Francois Bourgeois
2
Então, o que você deve fazer?
BlueSky
1
<Files *>
Header set Cache-Control: "no-cache, private, pre-check=0, post-check=0, max-age=0"
Header set Expires: 0
Header set Pragma: no-cache
</Files>
Alfabravo
fonte
1

Eu sei que essa é uma pergunta "antiga". Mas as dores de cabeça com o cache nunca são. Após várias tentativas e erros, descobri que um de nossos provedores de hospedagem na web tinha através do CPanel esse aplicativo chamado Cachewall. Acabei de clicar no modo Habilitar Desenvolvimento e ... voilà !!! Parou imediatamente a dor sofrida :) Espero que ajude outra pessoa ... R

Ramon Araujo
fonte
0

Eu estava obtendo o mesmo arquivo css quando navego no site (no servidor da empresa de hospedagem com domínio real) e não consegui obter a versão atualizada no chrome. Consegui obter a versão atualizada do arquivo quando o navego no Firefox. Nenhuma dessas respostas funcionou para mim. Eu também tenho os arquivos do site na minha máquina e navego no site com localhost usando meu servidor apache local. Desliguei o servidor apache e consegui obter o arquivo atualizado. De alguma forma, meu servidor apache local estava mexendo com o cache do Chrome. Espero que isso ajude alguém, pois foi muito difícil para mim corrigir isso.

Alp Hancıoğlu
fonte
0
  1. Ferramentas abertas do desenvolvedor

    • Ou F12
    • Ou ...-> More Tools->Developer Tools
  2. Clique Empty Cache and Hard Reload

    • Clique com o botão direito do mouse no ícone de atualização (apenas à esquerda na barra de endereços do URL)
    • Ou clique com o botão esquerdo do mouse no ícone de atualização e mantenha-o pressionado por 1 segundo
Xin
fonte