Вопрос:

Может ли Spring Boot обслуживать предварительно сжатые активы

spring spring-boot

592 просмотра

4 ответа

36 Репутация автора

Мне интересно, поддерживает ли Spring или Spring Boot обслуживание предварительно сжатых ресурсов.

Например, nginx поддерживает это с gzip_static onфлагом. Когда клиент отправляет Accept-Encoding: gzipзаголовок запроса, nginx проверяет, существует ли файл с запрошенным именем и окончанием «.gz». Если такой файл существует, nginx передает его клиенту и сохраняет некоторые циклы ЦП, поскольку ему не нужно сжимать его на лету.

Могу ли я сделать то же самое с Spring и сжать все мои файлы в статической папке, а встроенный веб-сервер обслуживает их как nginx?

Автор: JGrassini Источник Размещён: 13.01.2018 06:36

Ответы (4)


0 плюса

20626 Репутация автора

Да, вы можете настроить gzipсжатие для определенных ресурсов и их MIME-типов.

Вот как это выглядит, если вы используете файл application.yml :

server:
  compression:
    enabled: true
    mime-types: text/html,text/xml,text/plain,text/css,text/javascript,application/javascript
    min-response-size: 2048

А вот аналогичная конфигурация для файла application.properties :

server.compression.enabled=true # If response compression is enabled.
server.compression.mime-types=text/html,text/xml,text/plain,text/css,text/javascript,application/javascript # Comma-separated list of MIME types that should be compressed.
server.compression.min-response-size=2048 # Minimum response size that is required for compression to be performed.

Вы можете определить с помощью server.compression.mime-typesсвойства, какие активы должны быть сжаты, здесь в этом примере я использовал некоторые значения по умолчанию из Приложения A. Общие свойства приложения .

Здесь вы можете увидеть style.css(439 КБ) файл из демонстрационного приложения Spring Boot без сжатия:

введите описание изображения здесь

И здесь тот же файл, но с включенным сжатием (65,8 КБ):

введите описание изображения здесь

Автор: Szymon Stepniak Размещён: 13.01.2018 11:14

0 плюса

36 Репутация автора

Spring поддерживает этот вариант использования с org.springframework.web.servlet.resource.GzipResourceResolver

Этот распознаватель ищет файлы, заканчивающиеся на, .gzкогда клиент отправляет Accept-Encoding: gzipзаголовок.

Это было введено в Spring 4.1.

Вы можете включить этот преобразователь с помощью конфигурации ресурса:

@Configuration
class ResourceConfig implements WebMvcConfigurer {

  @Override
  public void addResourceHandlers(ResourceHandlerRegistry registry) {
    registry.addResourceHandler("/**")
            .addResourceLocations("classpath:/static/")
            .resourceChain(false).addResolver(new GzipResourceResolver());
  }
}

В Spring Boot 1.4 добавлена ​​поддержка автоматической настройки для распознавателя gzip. Добавьте это в файл application.properties, и Spring Boot автоматически зарегистрирует GzipResourceResolver

spring.resources.chain.gzipped=true
Автор: JGrassini Размещён: 14.01.2018 06:36

0 плюса

1398 Репутация автора

Насколько я знаю, у вас нет такой возможности, но вы можете сделать это довольно легко. Я думаю, что это на самом деле должно быть реализовано на уровне Tomcat или Jetty. Если вы внедрили фильтр, пожалуйста, помогите, потому что я тоже смотрю

Автор: stokito Размещён: 13.12.2018 08:52

0 плюса

1 Репутация автора

Да, ты можешь.

это решение аналогично JGrassini, но с помощью EncodedResourceResolver ваше приложение сможет обслуживать уже сжатые файлы .gz и .br:

@Configuration
@EnableWebMvc
public class MvcConfig implements WebMvcConfigurer {

    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry
            .setOrder(-1)
            .addResourceHandler("/**")
            .addResourceLocations("classpath:/where are your already compressed file to serve/")
            .resourceChain(true)
            .addResolver(new EncodedResourceResolver());
    }
}

Вы можете прочитать о: docs.spring.io

Автор: Paula Sartori Размещён: 24.05.2019 02:08
Вопросы из категории :
32x32