При использовании Spring Boot + Freemarker для разработки веб -проектов некоторые статические файлы относительно большие, и если они доступны на ПК, скорость будет намного медленнее при доступе на мобильном телефоне, особенно при использовании трафика, и он будет потреблять много трафика.
Пойдя по запросу, вы можете обнаружить, что каждый раз, когда вы вводите страницу, вам нужно загрузить статический файл. Если компания, которой не хватает денег, может поместить статический файл на CDN, чтобы ускорить доступ или использовать Nginx для кэша статических файлов.
Сегодня я представлю вам другой метод оптимизации кэша. Благодаря механизму кеша Spring статические файлы кэшируются. Для настройки статического кеша файла в Spring Boot вам нужно только добавить следующую конфигурацию в файл конфигурации:
# Время кэша ресурса, единичные секунды Spring.resources.cache-period = 604800 # Включить GZIP сжатие Spring.resources.chain.gzipplived = true # Включить кэш spring.resources.chain.cache = false
Вы можете обратиться к документации для конфигурации: раздел обработки ресурсов Spring 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 = "внешний nofollow" />Использование очень простое, ключ - откуда, откуда взялось значение версии?
Мы можем установить это значение через код перед запуском:
System.SetProperty («Версия», версия);
Это значение может быть передано через ARGS основного метода и динамически передано программе в сценарии, которая запускает проект. Сценарий запуска может получить значение MD5 программы JAR в качестве номера версии. Таким образом, когда серверная программа перезапускается, изменяется номер версии, а кэш становится недействительным.
Затем получите это значение в фильтре и установите его на запрос, и вы можете использовать его на каждой странице.
String version = system.getProperty ("version"); req.setattribute ("version", version == null? "1.0.0": версия);В дополнение к этому методу передачи параметров, вы также можете использовать пользовательские упакованные плагины, чтобы заменить версию определенным контентом при упаковке.
Приведенный выше метод заключается в управлении изменениями файла путем самостоятельного генерации версии. Фактически, Spring MVC предоставил функцию управления версией статических файлов. Есть два способа. Одним из них является генерирование номера версии через MD5 ресурса. Если содержимое файла изменится, MD5 определенно изменится. Другим способом является префикс ресурса с номером версии.
MD5
Добавьте следующую конфигурацию в файл свойств:
spring.resources.chain.strategy.content.enabled = truespring.resources.chain.strategy.content.paths =/**
Обработка добавления URL:
@Controlleradvicepublic class controlerconfig {@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 = "extraly nofollow">
После компиляции это станет следующим контентом:
Кода -копия выглядит следующим образом:
<link rel = "styleSheet" type = "text/css" href = "/css/main-app-4v371326bbb93ce4b611853a309b69b33.css" rel = "Внешний nofollow">
Номер версии
Добавьте следующую конфигурацию в файл свойств:
spring.resources.chain.strategy.fixed.enabled = truepring.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 больше.