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. 其他
項目源碼
- 工程:https://github.com/liuyueyi/spring-boot-demo
- 項目:https://github.com/liuyueyi/spring-boot-demo/tree/master/spring-boot/210-web-filter