Ao usar o Spring Boot + Freemarker para desenvolver projetos da Web, alguns arquivos estáticos são relativamente grandes e, se forem acessados em um PC, a velocidade será muito mais lenta ao acessar em um telefone celular, especialmente ao usar o tráfego, e consumirá muito tráfego.
Ao capturar a solicitação, você pode descobrir que toda vez que você insere uma página, precisa carregar um arquivo estático. Se uma empresa que não estiver com pouca dinheiro, puder colocar o arquivo estático em um CDN para acelerar o acesso ou usar o nginx para armazenar em cache arquivos estáticos.
Hoje vou apresentar a você um método de otimização de cache diferente. Através do mecanismo de cache da primavera, os arquivos estáticos são armazenados em cache. Para configurar o cache do arquivo estático na inicialização da mola, você só precisa adicionar a seguinte configuração ao arquivo de configuração:
# Horário de cache do recurso, unidade segundos spring.resources.cache-period = 604800 # Ativar compressão gzip spring.resources.chain.gzipped = true # enable cache spring.resources.chain.cache = false
Você pode consultar a documentação para configuração: Seção de manuseio de recursos de mola de https://docs.spring.io/spring-boot/docs/1.5.4.release/reference/htmlsingle/
Depois de adicionar a configuração do cache, depois de acessarmos a página, os recursos estáticos carregados serão armazenados em cache. Durante a segunda visita, não solicitaremos mais o download novamente. Ao pegar o pacote, podemos ver que ele realmente foi armazenado em cache.
Na coluna de tamanho, existe do cache de memória. O recurso é armazenado em cache na memória do navegador e alguns arquivos são armazenados em cache no disco, ou seja, do cache do disco.
O objetivo da otimização é alcançar, mas há um pequeno problema que não foi resolvido, ou seja, se o meu arquivo de recursos mudar, como o arquivo CSS for modificado e, quando meu servidor o lançar, ainda haverá um cache no usuário.
O melhor efeito é quando o arquivo muda ou quando o programa do servidor reinicia, a solicitação do usuário precisa baixar os recursos mais recentes do servidor. Quando não houver reinicialização, use o conteúdo em cache, para que o usuário possa ver o conteúdo mais recente imediatamente após a alteração.
Podemos usar o número da versão para resolver esse problema, que é adicionar um número de versão após o recurso estático e alterar o número da versão quando o recurso mudar, para que não haja problema.
Como usá -lo é o seguinte:
<link rel = "Stylesheet" href = "css /main-app.css? Version = $ {versão!}" rel = "Nofollow externo" />O uso é muito simples, a chave é de onde vem o valor da versão?
Podemos definir esse valor através do código antes de começar:
System.setProperty ("versão", versão);Esse valor pode ser transmitido através dos args do método principal e passado dinamicamente para o programa no script que inicia o projeto. O script de inicialização pode obter o valor MD5 do frasco do programa como o número da versão. Dessa forma, quando o programa do servidor reinicia, o número da versão muda e o cache se torna inválido.
Em seguida, obtenha esse valor no filtro e defina -o para a solicitação e você pode usá -lo em cada página.
String versão = System.getProperty ("versão"); req.setAttribute ("versão", versão == null? "1.0.0": versão);Além desse método de passagem de parâmetros, você também pode usar plugins embalados personalizados para substituir a versão por conteúdo específico ao embalagem.
O método acima é controlar as alterações do arquivo gerando a versão por si mesmo. De fato, o Spring MVC forneceu a função de gerenciamento de versão dos arquivos estáticos. Existem duas maneiras. Um é gerar o número da versão através do MD5 do recurso. Se o conteúdo do arquivo mudar, o MD5 também mudará. Outra maneira é prefixar o recurso com um número de versão.
MD5
Adicione a seguinte configuração ao arquivo de propriedades:
spring.resources.chain.strategy.content.enabled = truespring.resources.chain.strategy.content.paths =/**
Processamento da adição de URL:
@ControllerAdvicePublic Class ControllerConfig {@AUTOWIRED ResourceUrlProvider ResourceUrlProvider; @Modelattribute ("URLS") public ResourceUrlProvider urls () {return this.resourceurlProvider; }}O uso da página é o seguinte:
A cópia do código é a seguinte:
<link rel = "Stylesheet" type = "text/css" href = "$ {urls.getforlookuppath ('/css/main-app.css')}" rel = "nofollow externo">
Após a compilação, ele se tornará o seguinte conteúdo:
A cópia do código é a seguinte:
<link rel = "Stylesheet" type = "text/css" href = "/css/main-app-4v371326bb93ce4b611853a309b69b33.css" rel = "Nofollow externo">
Número da versão
Adicione a seguinte configuração ao arquivo de propriedades:
spring.resources.chain.strategy.fixed.enabled = truespring.resources.chain.strategy.fixed.paths =/js/**,/v1.0.0/** spring.resources.chain.strategy.fixed.version = v1.0.0
O uso da página é o seguinte:
<script type = "text/javascript" src = "$ {urls.getforlookuppath ('/js/main.js')}"> </script>Após a compilação, ele se tornará o seguinte conteúdo:
<script type = "text/javascript" src = "/v1.0.0/js/main.js"> </script>
Independentemente do método que você usa, você pode alcançar o efeito e a carga de trabalho não será muito grande. A otimização será interminável e você será feito.
O exposto acima é todo o conteúdo deste artigo. Espero que seja útil para o aprendizado de todos e espero que todos apoiem mais o wulin.com.