最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Spring Boot Web 靜態(tài)文件緩存處理的方法

 更新時(shí)間:2018年02月28日 09:28:16   作者:尹吉?dú)g  
本篇文章主要介紹了Spring Boot Web 靜態(tài)文件緩存處理的方法,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧

采用Spring Boot + Freemarker開(kāi)發(fā)Web項(xiàng)目時(shí),由于一些靜態(tài)文件比較大,如果是在PC上訪問(wèn)影響不大,當(dāng)在手機(jī)上訪問(wèn)時(shí),特別是用流量訪問(wèn)時(shí)速度會(huì)慢很多,而且很耗流量。

通過(guò)對(duì)請(qǐng)求進(jìn)行抓包,可以發(fā)現(xiàn)每次進(jìn)入一個(gè)頁(yè)面都需要加載靜態(tài)文件,如果不差錢(qián)的公司可以將靜態(tài)文件放在CDN上來(lái)加快訪問(wèn)速度,或者用Nginx來(lái)做靜態(tài)文件的緩存。

今天給大家介紹一種其他的緩存優(yōu)化方式,通過(guò)Spring的緩存機(jī)制來(lái)緩存靜態(tài)文件,在Spring Boot中配置靜態(tài)文件緩存只需要在配置文件中加入下面的配置即可:

# 資源緩存時(shí)間,單位秒
spring.resources.cache-period=604800 
# 開(kāi)啟gzip壓縮
spring.resources.chain.gzipped=true 
# 啟用緩存
spring.resources.chain.cache=false

配置可以參考文檔: https://docs.spring.io/spring-boot/docs/1.5.4.RELEASE/reference/htmlsingle/ 的SPRING RESOURCES HANDLING部分

加上緩存配置后我們?cè)L問(wèn)頁(yè)面后,被加載過(guò)的靜態(tài)資源就會(huì)緩存起來(lái),第二次訪問(wèn)時(shí)就不會(huì)再去重新請(qǐng)求下載了,通過(guò)抓包可以看出確實(shí)被緩存了。

在Size那列有from memory cache,資源被緩存在瀏覽器的內(nèi)存中了,也有的文件會(huì)緩存在磁盤(pán)中,那就是from disk cache。

優(yōu)化目的是達(dá)到了,但是有一個(gè)小問(wèn)題沒(méi)有解決,就是如果我的資源文件變了,比如css文件有修改,當(dāng)我服務(wù)端發(fā)布之后,用戶這邊還是會(huì)存在緩存。

最好的效果時(shí)當(dāng)文件有改變時(shí)或者說(shuō)當(dāng)服務(wù)端的程序重啟之后,用戶的請(qǐng)求需要下載服務(wù)端的最新資源,沒(méi)有重啟的時(shí)候就用緩存的內(nèi)容,這樣就能保證更改后用戶能夠馬上看到最新的內(nèi)容。

我們可以用版本號(hào)來(lái)解決這個(gè)問(wèn)題,就是在靜態(tài)資源后面加上一個(gè)版本號(hào),當(dāng)資源發(fā)生變化時(shí)將版本號(hào)也改變,這樣就不會(huì)有問(wèn)題了。

使用方式如下:

<link rel="stylesheet" href="css/main-app.css?version=${version!}" rel="external nofollow" />

用法很簡(jiǎn)單,關(guān)鍵是version這個(gè)值從哪來(lái)呢?

我們可以在啟動(dòng)前通過(guò)代碼設(shè)置這個(gè)值:

System.setProperty("version", version);

這個(gè)值可以通過(guò)main方法的args傳進(jìn)來(lái),在啟動(dòng)項(xiàng)目的腳本中動(dòng)態(tài)傳到程序中,啟動(dòng)腳本可以獲取程序jar的MD5值作為版本號(hào),這樣當(dāng)服務(wù)端的程序重啟之后,版本號(hào)就變了,緩存就失效了。

然后在過(guò)濾器中獲取這個(gè)值設(shè)置到request中就可以在每個(gè)頁(yè)面中使用了

String version = System.getProperty("version");
req.setAttribute("version", version == null ? "1.0.0" : version);

除了這種參數(shù)傳遞的方式,大家還可以通過(guò)自定義打包的插件,在打包的時(shí)候?qū)ersion替換成具體的內(nèi)容也可以。

上面講的方式是通過(guò)自己去生成version來(lái)控制文件的變更,其實(shí)Spring Mvc中已經(jīng)提供了靜態(tài)文件的版本管理功能,有二種方式,一種是通過(guò)資源的MD5來(lái)生成版本號(hào),文件內(nèi)容變了,MD5肯定也變了。另一種是在資源的前面加上版本號(hào)的路徑。

MD5

在屬性文件中增加下面的配置:

spring.resources.chain.strategy.content.enabled=true
spring.resources.chain.strategy.content.paths=/**

增加Url的處理:

@ControllerAdvice
public class ControllerConfig {

  @Autowired
  ResourceUrlProvider resourceUrlProvider;

  @ModelAttribute("urls")
  public ResourceUrlProvider urls() {
    return this.resourceUrlProvider;
  }

}

頁(yè)面中使用方式如下:

復(fù)制代碼 代碼如下:

<link rel="stylesheet" type="text/css" href="${urls.getForLookupPath('/css/main-app.css')}" rel="external nofollow" >

編譯之后就會(huì)變成下面的內(nèi)容:

復(fù)制代碼 代碼如下:

<link rel="stylesheet" type="text/css" href="/css/main-app-4v371326bb93ce4b611853a309b69b33.css" rel="external nofollow" >

版本號(hào)

在屬性文件中增加下面的配置:

spring.resources.chain.strategy.fixed.enabled=true
spring.resources.chain.strategy.fixed.paths=/js/**,/v1.0.0/**
spring.resources.chain.strategy.fixed.version=v1.0.0

頁(yè)面中使用方式如下:

<script type="text/javascript" src="${urls.getForLookupPath('/js/main.js')}"></script>

編譯之后就會(huì)變成下面的內(nèi)容:

<script type="text/javascript" src="/v1.0.0/js/main.js"></script>

無(wú)論使用哪種方式,能實(shí)現(xiàn)效果,并且工作量不會(huì)太大即可,優(yōu)化無(wú)止境,干就完了。

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Java通過(guò)python命令執(zhí)行DataX任務(wù)的實(shí)例

    Java通過(guò)python命令執(zhí)行DataX任務(wù)的實(shí)例

    今天小編就為大家分享一篇Java通過(guò)python命令執(zhí)行DataX任務(wù)的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-08-08
  • 實(shí)例講解使用Spring通過(guò)JPA連接到Db2

    實(shí)例講解使用Spring通過(guò)JPA連接到Db2

    這篇文章主要介紹了通過(guò)實(shí)例講解使用Spring通過(guò)JPA連接到Db2,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,下面我們來(lái)一起學(xué)習(xí)一下吧
    2019-06-06
  • logback如何自定義日志存儲(chǔ)

    logback如何自定義日志存儲(chǔ)

    這篇文章主要介紹了logback如何自定義日志存儲(chǔ)的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-08-08
  • Java實(shí)現(xiàn)下載文件的6種方式

    Java實(shí)現(xiàn)下載文件的6種方式

    本文主要介紹了Java實(shí)現(xiàn)下載文件的6種方式,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-06-06
  • scala當(dāng)中的文件操作和網(wǎng)絡(luò)請(qǐng)求的實(shí)現(xiàn)方法

    scala當(dāng)中的文件操作和網(wǎng)絡(luò)請(qǐng)求的實(shí)現(xiàn)方法

    這篇文章主要介紹了scala當(dāng)中的文件操作和網(wǎng)絡(luò)請(qǐng)求的實(shí)現(xiàn)方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-06-06
  • java8 stream的分組功能實(shí)例介紹

    java8 stream的分組功能實(shí)例介紹

    這篇文章主要給大家介紹了關(guān)于java8 stream的分組功能的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用java8具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-12-12
  • Java實(shí)現(xiàn)上傳文件到服務(wù)器的示例代碼

    Java實(shí)現(xiàn)上傳文件到服務(wù)器的示例代碼

    這篇文章主要為大家詳細(xì)介紹了如何使用Java實(shí)現(xiàn)上傳文件到服務(wù)器,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2024-04-04
  • spring中定時(shí)任務(wù)taskScheduler的詳細(xì)介紹

    spring中定時(shí)任務(wù)taskScheduler的詳細(xì)介紹

    這篇文章主要介紹了spring中定時(shí)任務(wù)taskScheduler的相關(guān)資料,文中通過(guò)示例代碼介紹的很詳細(xì),相信對(duì)大家具有一定的參考價(jià)值,有需要的朋友們下面來(lái)一起看看吧。
    2017-02-02
  • vscode 配置java環(huán)境并調(diào)試運(yùn)行的詳細(xì)過(guò)程

    vscode 配置java環(huán)境并調(diào)試運(yùn)行的詳細(xì)過(guò)程

    這篇文章主要介紹了vscode 配置java環(huán)境并調(diào)試運(yùn)行的詳細(xì)過(guò)程,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-05-05
  • java更改圖片大小示例分享

    java更改圖片大小示例分享

    這篇文章主要介紹了java更改圖片大小示例,方法中指定路徑 ,舊文件名稱 ,新文件名稱,n 改變倍數(shù)就可以完成更改圖片大小,需要的朋友可以參考下
    2014-03-03

最新評(píng)論

民权县| 杨浦区| 珲春市| 建始县| 高安市| 天长市| 岱山县| 汶川县| 法库县| 专栏| 台山市| 从江县| 舒城县| 通化县| 汕尾市| 洛浦县| 鸡西市| 建始县| 建德市| 陇南市| 高邮市| 菏泽市| 自治县| 民乐县| 扎赉特旗| 琼中| 肇东市| 乌恰县| 含山县| 凤台县| 会宁县| 隆尧县| 鄄城县| 商水县| 湟源县| 宁晋县| 保德县| 博罗县| 绍兴县| 定南县| 青川县|