Spring Boot + Freemarker를 사용하여 웹 프로젝트를 개발할 때 일부 정적 파일은 비교적 넓고 PC에서 액세스 할 경우, 특히 트래픽을 사용할 때 속도가 훨씬 느려질 수 있으며 트래픽이 많이 소비됩니다.
요청을 포착하면 페이지를 입력 할 때마다 정적 파일을로드해야합니다. 돈이 부족하지 않은 회사가 정적 파일을 CDN에 배치하여 액세스 속도를 높이거나 nginx를 사용하여 정적 파일을 캐시 할 수 있습니다.
오늘은 다른 캐시 최적화 방법을 소개하겠습니다. Spring의 캐시 메커니즘을 통해 정적 파일이 캐시됩니다. Spring Boot에서 정적 파일 캐시를 구성하려면 구성 파일에 다음 구성 만 추가하면됩니다.
# 자원 캐시 시간, 단위 Seconds Spring.Resources.cache-period = 604800 # GZIP 압축 스프링을 활성화합니다.
https://docs.spring.io/spring-boot/docs/1.5.4.release/reference/htmlsingle/의 구성 문서를 참조하십시오.
캐시 구성을 추가 한 후 페이지에 액세스 한 후로드 된 정적 자원이 캐시됩니다. 두 번째 방문 중에는 더 이상 다운로드를 다시 요청하지 않습니다. 패킷을 잡음으로써 우리는 그것이 실제로 캐시되었음을 알 수 있습니다.
크기 열에 메모리 캐시가 있습니다. 리소스는 브라우저의 메모리에 캐시되고 일부 파일은 디스크, 즉 디스크 캐시에서 캐시됩니다.
최적화의 목적은 달성하는 것이지만, 해결되지 않은 작은 문제가 있습니다. 즉, CSS 파일과 같은 내 리소스 파일이 변경되고 서버가 출시되면 여전히 사용자의 캐시가 있습니다.
가장 좋은 효과는 파일이 변경 될 때 또는 서버 프로그램이 다시 시작될 때 사용자의 요청은 서버에서 최신 리소스를 다운로드해야합니다. 다시 시작하지 않으면 캐시 된 컨텐츠를 사용하여 변경 직후 최신 컨텐츠를 볼 수 있도록하십시오.
정적 자원 후 버전 번호를 추가하고 리소스가 변경 될 때 버전 번호를 변경하는이 문제를 해결하기 위해 버전 번호를 사용 하여이 문제를 해결할 수 있으므로 문제가 없습니다.
사용 방법은 다음과 같습니다.
<link rel = "Stylesheet"href = "css /main-app.css? version = $ {version!}"rel = "external nofollow" />사용법은 매우 간단합니다. 키는 버전 값의 출처는 어디입니까?
시작하기 전에 코드를 통해이 값을 설정할 수 있습니다.
System.SetProperty ( "버전", 버전);
이 값은 주요 방법의 Args를 통해 전달 될 수 있으며 프로젝트를 시작하는 스크립트의 프로그램에 동적으로 전달됩니다. 시작 스크립트는 프로그램 JAR의 MD5 값을 버전 번호로 얻을 수 있습니다. 이러한 방식으로 서버 프로그램이 다시 시작되면 버전 번호가 변경되고 캐시가 유효하지 않습니다.
그런 다음 필터 에서이 값을 가져 와서 요청으로 설정하면 각 페이지에서 사용할 수 있습니다.
문자열 버전 = system.getProperty ( "버전"); req.setAttribute ( "버전", version == null? "1.0.0": version);
이 매개 변수를 전달하는이 방법 외에도 포장시 맞춤형 포장 플러그인을 사용하여 버전을 포장시 특정 컨텐츠로 대체 할 수도 있습니다.
위의 방법은 직접 버전을 생성하여 파일 변경을 제어하는 것입니다. 실제로 Spring MVC는 정적 파일의 버전 관리 기능을 제공했습니다. 두 가지 방법이 있습니다. 하나는 리소스의 MD5를 통해 버전 번호를 생성하는 것입니다. 파일 내용이 변경되면 MD5도 분명히 변경됩니다. 또 다른 방법은 버전 번호로 리소스를 접두사하는 것입니다.
MD5
속성 파일에 다음 구성을 추가하십시오.
spring.resources.chain.strategy.content.enabled = truespring.resources.chain.strategy.content.paths =/**
URL 추가 처리 :
@controllerAdVicePublic Class ControlLerConfig {@autowired resourceurlprovider resourceurlprovider; @modelattribute ( "urls") public resourceurlprovider urls () {return this.resourceurlprovider; }}페이지의 사용은 다음과 같습니다.
코드 사본은 다음과 같습니다.
<link rel = "Stylesheet"type = "text/css"href = "$ {urls.getForLookUpPath ( '/css/main-app.css')}"rel = "external nofollow">
컴파일 후 다음 컨텐츠가됩니다.
코드 사본은 다음과 같습니다.
<link rel = "Stylesheet"type = "text/css"href = "/css/main-app-4v371326bbb93ce4b611853a309b69b33.css"rel = "외부 nofollow">
버전 번호
속성 파일에 다음 구성을 추가하십시오.
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
페이지의 사용은 다음과 같습니다.
<script type = "text/javaScript"src = "$ {urls.getForLookUpPath ( '/js/main.js')}"> </script>컴파일 후 다음 컨텐츠가됩니다.
<script type = "text/javaScript"src = "/v1.0.0/js/main.js"> </script>
어떤 방법을 사용하든 효과를 달성 할 수 있으며 워크로드가 너무 크지 않습니다. 최적화는 끝이없고 당신은 끝날 것입니다.
위는이 기사의 모든 내용입니다. 모든 사람의 학습에 도움이되기를 바랍니다. 모든 사람이 wulin.com을 더 지원하기를 바랍니다.