SpringBoot中開(kāi)啟GZIP壓縮的方式
前言
首先GZIP壓縮有哪些好處了解一下先:
- 1.減小響應(yīng)體大小
- 2.提升頁(yè)面的加載速度
- 3.節(jié)省帶寬成本
- 4.優(yōu)化移動(dòng)端的體驗(yàn)(主要是一般在移動(dòng)端設(shè)備上,網(wǎng)絡(luò)帶寬通常是比較慢的,啟用可以有效提升速度)
- 5.更有效的緩存利用
- 6.改善SEO搜索引擎優(yōu)化
開(kāi)啟GZIP壓縮方式
第一種
server: compression: enabled: true min-response-size: 1024 # 只有響應(yīng)體大于 1KB 時(shí)才壓縮 mime-types: # 下面的是響應(yīng)體的格式是這些的時(shí)候會(huì)壓縮 - application/json - application/xml - text/html - text/plain - text/css - application/javascript
- 未開(kāi)啟GZIP的響應(yīng)頭
- 開(kāi)啟GZIP后的響應(yīng)頭
這里可能你目前響應(yīng)體返回的內(nèi)容短的時(shí)候你看不出來(lái),但是一旦響應(yīng)較長(zhǎng)的內(nèi)容,你就能看到響應(yīng)時(shí)間和渲染時(shí)間明顯的加速
第二種
如果你想進(jìn)行更精細(xì)的控制,可以通過(guò)編程的方式來(lái)啟用和配置 GZIP 壓縮。
例如,使用 WebMvcConfigurer
來(lái)自定義壓縮策略:
import org.springframework.boot.web.servlet.ServletRegistrationBean; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; @Configuration public class WebConfig implements WebMvcConfigurer { @Bean public ServletRegistrationBean<Filter> compressionFilter() { // 可以自定義壓縮邏輯的 Filter(可選) Filter compressionFilter = new GzipFilter(); ServletRegistrationBean<Filter> registrationBean = new ServletRegistrationBean<>(compressionFilter); registrationBean.addUrlPatterns("/api/*"); // 指定哪些 URL 需要壓縮 return registrationBean; } }
第三種
盡管 Spring Boot 可以在應(yīng)用層進(jìn)行 GZIP 壓縮,通常在生產(chǎn)環(huán)境中使用 Nginx 或 Apache 等反向代理服務(wù)器進(jìn)行 GZIP 壓縮更為高效,因?yàn)榉聪虼硗ǔ1葢?yīng)用服務(wù)器更擅長(zhǎng)處理靜態(tài)內(nèi)容的壓縮。
http { gzip on; gzip_types application/json application/xml text/html text/plain text/css application/javascript; gzip_min_length 1024; }
總結(jié)
- 默認(rèn)情況下,Spring Boot 不啟用 GZIP 壓縮。
- 你可以通過(guò)在
application.properties
或application.yml
中配置來(lái)啟用它。 - 啟用 GZIP 后,只有當(dāng)響應(yīng)體的大小大于指定的
min-response-size
時(shí),才會(huì)進(jìn)行壓縮,默認(rèn)值是 2048 字節(jié)(2 KB)。
強(qiáng)調(diào)開(kāi)啟GZIP的好處有哪些?
1.減小響應(yīng)體大小
- 壓縮數(shù)據(jù):GZIP 壓縮能夠顯著減小響應(yīng)體的大小,尤其是對(duì)于 JSON、HTML、CSS、JavaScript 等文本格式的數(shù)據(jù)。通常,文本數(shù)據(jù)能被壓縮到原來(lái)的 20% 到 30% 左右,甚至更多,這有助于節(jié)省帶寬。
- 減少數(shù)據(jù)傳輸:壓縮后的數(shù)據(jù)更小,意味著從服務(wù)器到客戶端傳輸?shù)臄?shù)據(jù)量減少,這對(duì)于網(wǎng)絡(luò)帶寬有限的環(huán)境尤其重要。
2. 提升頁(yè)面加載速度
- 更快的加載速度:響應(yīng)體變小后,傳輸時(shí)間減少,客戶端(如瀏覽器)能夠更快地獲取到數(shù)據(jù),從而加快頁(yè)面渲染或 API 請(qǐng)求的響應(yīng)速度。
- 改善用戶體驗(yàn):壓縮后的響應(yīng)能夠減少頁(yè)面加載時(shí)間,提升用戶體驗(yàn),尤其是在移動(dòng)端或網(wǎng)絡(luò)條件不佳的環(huán)境中。
3. 節(jié)省帶寬成本
- 降低帶寬消耗:對(duì)于需要處理大量請(qǐng)求的服務(wù)器,GZIP 壓縮能夠有效減少帶寬消耗,從而減少服務(wù)器的帶寬成本。
- 適應(yīng)大流量應(yīng)用:在高并發(fā)的情況下,壓縮能夠緩解帶寬壓力,提高服務(wù)的可伸縮性。
4. 優(yōu)化移動(dòng)端體驗(yàn)
- 改善移動(dòng)網(wǎng)絡(luò)條件下的性能:在移動(dòng)設(shè)備上,網(wǎng)絡(luò)帶寬通常較慢,啟用 GZIP 壓縮可以顯著提升應(yīng)用在 3G/4G 等不穩(wěn)定網(wǎng)絡(luò)環(huán)境下的響應(yīng)速度。
- 減少流量使用:移動(dòng)設(shè)備的流量通常有限,壓縮后的響應(yīng)能夠減少流量消耗,有利于用戶節(jié)省流量。
5. 更有效的緩存利用
- 優(yōu)化緩存策略:在某些場(chǎng)景下,壓縮后的響應(yīng)體能更好地適應(yīng) HTTP 緩存機(jī)制。尤其是通過(guò)緩存代理(如 CDN 或緩存服務(wù)器)時(shí),壓縮響應(yīng)能幫助緩存內(nèi)容更有效地傳輸并存儲(chǔ)。
- Vary 頭部支持:如果使用
Vary
頭部來(lái)處理不同的請(qǐng)求,例如,響應(yīng)的內(nèi)容可能會(huì)因客戶端的Accept-Encoding
請(qǐng)求頭而有所不同。啟用 GZIP 后,緩存代理可以更精確地緩存不同版本的響應(yīng)。
6. 減少服務(wù)器負(fù)擔(dān)
- 減輕應(yīng)用服務(wù)器壓力:雖然壓縮會(huì)增加服務(wù)器端的 CPU 負(fù)擔(dān)(因?yàn)樾枰獙?duì)響應(yīng)體進(jìn)行壓縮),但它能夠通過(guò)減小傳輸數(shù)據(jù)量來(lái)減少帶寬壓力,特別是在高流量的場(chǎng)景下,服務(wù)器的網(wǎng)絡(luò)帶寬瓶頸可能比 CPU 成為瓶頸更早,從而間接優(yōu)化了服務(wù)器性能。
- 適用于大流量應(yīng)用:對(duì)于高并發(fā)、大流量的應(yīng)用,GZIP 壓縮可以幫助有效降低帶寬需求,從而提高整體服務(wù)的性能和穩(wěn)定性。
7. 改善 SEO 和 Google PageSpeed
- 優(yōu)化 SEO(搜索引擎優(yōu)化):雖然 GZIP 壓縮本身并不會(huì)直接影響 SEO,但壓縮可以加速網(wǎng)頁(yè)加載時(shí)間,搜索引擎(如 Google)通常會(huì)將加載速度作為排名的一項(xiàng)指標(biāo)。因此,啟用 GZIP 壓縮可能間接地幫助提高網(wǎng)站的 SEO 排名。
- 提升 Google PageSpeed:Google PageSpeed 工具通常建議開(kāi)啟壓縮,以提高頁(yè)面性能評(píng)分。啟用 GZIP 壓縮有助于提升 PageSpeed 評(píng)分,優(yōu)化用戶體驗(yàn)。
8. 支持現(xiàn)代瀏覽器的自動(dòng)解壓縮
- 瀏覽器支持:現(xiàn)代瀏覽器(如 Chrome、Firefox、Safari 等)都支持 GZIP 解壓縮??蛻舳嗽谑盏綁嚎s的響應(yīng)后,瀏覽器會(huì)自動(dòng)進(jìn)行解壓并呈現(xiàn)數(shù)據(jù),不需要前端開(kāi)發(fā)者額外處理。
- 無(wú)需手動(dòng)解壓:對(duì)于客戶端來(lái)說(shuō),GZIP 解壓縮是自動(dòng)的,不需要開(kāi)發(fā)者介入,簡(jiǎn)化了開(kāi)發(fā)工作。
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Kafka消費(fèi)客戶端協(xié)調(diào)器GroupCoordinator詳解
這篇文章主要為大家介紹了Kafka消費(fèi)客戶端協(xié)調(diào)器GroupCoordinator使用示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-10-10使用Java手搓一個(gè)控制臺(tái)進(jìn)度條打印工具
這篇文章主要為大家詳細(xì)介紹了如何使用Java手搓一個(gè)控制臺(tái)進(jìn)度條打印工具,文中的示例代碼簡(jiǎn)潔易懂,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2025-04-04SpringBoot集成validation校驗(yàn)參數(shù)遇到的坑
這篇文章主要介紹了SpringBoot集成validation校驗(yàn)參數(shù)遇到的坑,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-12-12全面了解OAuth?2.0四種授權(quán)方式金三銀四無(wú)懼面試
這篇文章主要介紹了全面了解OAuth?2.0四種授權(quán)方式金三銀四無(wú)懼面試,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-02-02Spring Security OAuth2集成短信驗(yàn)證碼登錄以及第三方登錄
這篇文章主要介紹了Spring Security OAuth2集成短信驗(yàn)證碼登錄以及第三方登錄,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-04-04