5
respostas

Build - Cache do Browse

Prezado Flávio,

Estou fazendo o build do projeto dos meus estudos, percebi que depois de publicar em um servidor II7 e ao acessar pelo browse é retornado a versão anterior como se estivesse em cache.

Pesquisando na internet verifiquei que ser fizesse o build conforme o comando abaixo resolveria, mas não obtive sucesso.

ng build --prod --outputHashing=all --base-href="/ProjetoTeste/" --deploy-url="/ProjetoTeste/" ng build --prod --aot --outputHashing=all --base-href="/ProjetoTeste/" --deploy-url="/ProjetoTeste/"

Também coloquei na página index.html os comandos a seguir.

Estou utilizando o angular versão 11.

Você pode me ajudar nesse processo de build para resolver esse problema.

Parabéns pelo excelente conteúdo e a forma simples de passar seu conhecimento.

Desde já agradeço.

5 respostas

Fala ai Amaro, tudo bem? Precisa verificar nas configurações do II7 como estão os detalhes de cache, pode ser que seja um problema em relação ao servidor e não o projeto.

Isso porque o projeto provavelmente deve estar gerando os arquivos finais com hash em seus nomes.

Espero ter ajudado.

Oi Matheus, boa noite.

Como mencionei, a nova versão publicada só não atualiza no browse que já tenha feito um acesso ao projeto, mas se limpo o cache do browse, no caso o chrome, e acesso novamente a versão atualizada é visualizada.

Outro teste que fiz foi publicar a aplicação e acessar em um novo computador, veio a versão atualizada, mas se gero uma nova versão e publico novamente, ao acessar ainda fico visualizando a versão anterior, ai preciso limpar o cache (browse) para ter a nova versão.

Quando coloquei a formar de compilar com os comandos abaixo, foi porque vi os exemplos que resolveria esse problema, mas não obtive sucesso.

ng build --prod --aot --outputHashing=all --base-href="/testecache/" --deploy-url="/testecache/"

Em fim, o que li até agora é que isso seria um problema da aplicação (Build Angular) com o cache do browse.

Caso possa ter mais alguma dica agradeço.

Abraço

Fala Amaro, então, mas quando o navegador baixa os arquivos (assets) o seu servidor pode estar definindo uma idade para os arquivos, dessa forma, o navegador apenas vai baixar novos arquivos e sobrepor os atuais quando essa idade der o tempo que foi configurado.

Você precisa ver como está essas configurações, isso é como a gente faz invalidação de cache é uma estratégia de definir até quando uma arquivo deve ser cacheado ou não.

Exemplo: Baixe esse arquivo a.js e ele vai durar 10 dias.

Nesse exemplo o navegador apenas vai baixar uma nova versão do arquivo a.js daqui 10 dias, ou, a pessoa pode forçar essa atualização da forma como tu fez e outras N maneiras.

O projeto do Angular por padrão já vem configurado para buildar os arquivos com hash como deve ser.

Espero ter ajudado.

Oi Matheus,

Entendi, vou dar uma verificada nessa questão do cache.

Mas tira só mais uma dúvida, fato de eu apagar toda a aplicação publicada, para o serviço do servidor (application pool), publicar novamente a aplicação e reiniciar o serviço não era para resolver essa questão do cache do servidor.

Desculpa a insistência sobre querer entender e achar que não problema não é o servidor, apenas quero me certificar que esgotei as tentativas no IIS, mas vou ver a questão do Cache agora.

Obrigado pela atenção

Abraço

Fala Amaro, então, é porque uma vez que o browser fez o download do asset e nesse download continha um cabeçalho informando a idade do arquivo, ou seja, até quando ele deve ser priorizado, cacheado e validado. Dessa forma ele não vai realizar a requisição novamente, pois, foi falado para ele não fazê-la.

A unica forma seria invalidando o cache, apagando esse cache para que ele baixe novamente, forçando o download do asset ou desabilitando o cache do navegador.

Pode ser o build do Angular? Sim, pode ser. Mas, eu acho pouco provavel, isso porque várias empresas hoje utilizam o build de produção nativo sem problemas em relação a estratégias e invalidações de cache. Isso porque as configurações nativas já vem para que o mesmo tenha no nome dos arquivos finais um hash, justamente utilizado para invalidar caches antigos.

Pode ser que não seja o IIS e seja outra coisa? Sim.

É um problema bem específico do qual pode ter N razões e soluções, você vai ter que ir validando e testando hipotese por hipotese até achar o problema, que pode ser uma ou um conjunto de hipoteses.

Espero ter ajudado.