SpringBoot系列教程Web篇之開啟GZIP數據壓縮

  • 2019 年 11 月 27 日
  • 筆記

本篇可以歸納在性能調優篇,雖然內容非常簡單,但效果可能出乎預料的好;

分享一個真實案例,我們的服務部署在海外,中國訪問時訪問服務時,響應有點誇張;某些返回數據比較大的介面,耗時在 600ms+上,然而我們的服務 rt 卻是在 20ms 以下,絕大部分的開銷都花在了網路傳輸上

針對這樣的場景,除了買雲服務商的網路通道之外,另外一個直觀的想法就是減少數據包的大小,直接在 nginx 層配置 gzip 壓縮是一個方案,本文主要介紹下,SpringBoot 如何開啟 gzip 壓縮

I. gizp 壓縮配置

1. 配置

SpringBoot 默認是不開啟 gzip 壓縮的,需要我們手動開啟,在配置文件中添加兩行

server:    compression:      enabled: true      mime-types: application/json,application/xml,text/html,text/plain,text/css,application/x-javascript

注意下上面配置中的mime-types,在 spring2.0+的版本中,默認值如下,所以一般我們不需要特意添加這個配置

// org.springframework.boot.web.server.Compression#mimeTypes  /**   * Comma-separated list of MIME types that should be compressed.   */  private String[] mimeTypes = new String[] { "text/html", "text/xml", "text/plain",  		"text/css", "text/javascript", "application/javascript", "application/json",  		"application/xml" };

2. 測試

寫一個測試的 demo

@RestController  public class HelloRest {      @GetMapping("bigReq")      public String bigReqList() {          List<String> result = new ArrayList<>(2048);          for (int i = 0; i < 2048; i++) {              result.add(UUID.randomUUID().toString());          }          return JSON.toJSONString(result);      }  }

下面是開啟壓縮前後的數據報對比

3. 說明

雖然加上了上面的配置,開啟了 gzip 壓縮,但是需要注意並不是說所有的介面都會使用 gzip 壓縮,默認情況下,僅會壓縮 2048 位元組以上的內容

如果我們需要修改這個值,通過修改配置即可

server:    compression:      min-response-size: 1024

II. 其他

項目源碼

Tags: