摘要:為了提升網(wǎng)站性能,有效利用緩存能夠提升用戶體驗(yàn),提高訪問效率。同時(shí)不要忘記給文件名加上指紋,以便及時(shí)更新改動(dòng)同樣設(shè)置為年后到期,但標(biāo)記為,因?yàn)樗赡軙?huì)包含某些用戶私人數(shù)據(jù),這是不應(yīng)緩存的。圖像緩存時(shí)不包含版本或唯一指紋,并設(shè)置為天后到期。
前言
由于項(xiàng)目越來越大,即使了使用代碼壓縮工具減少文件大小,js文件還是不可避免的越變?cè)酱蟆?br>而對(duì)于用戶來說每次重新下載都有可能會(huì)消耗大量時(shí)間,讓我們的首屏展示有較長(zhǎng)時(shí)間的空白。
為了提升網(wǎng)站性能,有效利用緩存能夠提升用戶體驗(yàn),提高訪問效率。
http-equiv屬性,相當(dāng)于http的文件頭中的參數(shù),而content的內(nèi)容則是對(duì)應(yīng)參數(shù)的值
然而設(shè)置pragma: no-cache并不能應(yīng)用于HTTP1.1及以上規(guī)范,
而且因?yàn)檫@個(gè)方法太老了,如果你不需要估計(jì)那些史前客戶的感受,完全可以不加?
當(dāng)然可以不用太方,還有其他的參數(shù)可以選擇使用
但是使用meta標(biāo)簽設(shè)置的參數(shù)優(yōu)先級(jí)低于http請(qǐng)求中聲明的,如果你同時(shí)設(shè)置了http頭,那么就沒有必要加上meta標(biāo)簽了。
當(dāng)然,最后還有一個(gè)重要的一點(diǎn),就是根據(jù)叉燒包的實(shí)驗(yàn),meta制定這些內(nèi)容可以說基本沒有什么卵用:)
悲傷的故事……當(dāng)然可能你的瀏覽器還可以用哦
最保險(xiǎn)的顯然是配置Header參數(shù)來保證資源的緩存
Cache-Control
Cache-Control 標(biāo)頭是在 HTTP/1.1 規(guī)范中定義的,取代了之前用來定義響應(yīng)緩存策略的標(biāo)頭例如 Expires。
所有現(xiàn)代瀏覽器都支持 Cache-Control。
max-age 指從請(qǐng)求的時(shí)間開始,允許緩存有效的最長(zhǎng)時(shí)間(單位是s)
public 可被任何對(duì)象緩存。它不是必須的,因?yàn)槊鞔_的緩存信息已表示響應(yīng)是可以緩存的
private 通常只為單個(gè)用戶緩存,不允許任何中間緩存對(duì)其進(jìn)行緩存
no-cache 表示必須先與服務(wù)器確認(rèn)返回的響應(yīng)是否發(fā)生了變化
no-store 禁止瀏覽器以及所有中間緩存存儲(chǔ)任何版本的返回響應(yīng),每次請(qǐng)求必須重新下載
借用谷歌爸爸的一張圖來展示一下Cache-Control的選擇策略
Expires
它代表一個(gè)緩存過期的絕對(duì)時(shí)間,在HTTP/1.0中實(shí)現(xiàn),在HTTP/1.1中優(yōu)先級(jí)低于Cache-Control。
它的缺點(diǎn)就是如果服務(wù)器與客戶端誤差較大,那么它的誤差也會(huì)變大
Last-Modified
標(biāo)記的是資源的最后修改時(shí)間,需要配合Cache-Control使用。只能精確到秒級(jí),如果某些文件在1秒內(nèi)修改多次,則無法及時(shí)更新
ETag
相當(dāng)于驗(yàn)證令牌。通過它可以可實(shí)現(xiàn)高效的資源更新檢查:資源未發(fā)生變化時(shí)不會(huì)傳送任何數(shù)據(jù)。
ETag通常是服務(wù)器生成的文件內(nèi)容的哈希值或某個(gè)其他指紋。如果請(qǐng)求時(shí)指紋仍然相同,則表示資源未發(fā)生變化,則可跳過下載。
參數(shù)棄用小指南如果你不考慮ie6和HTTP 1.0客戶端,那么你可以無視Pragma
Cache-Control: no-store, must-revalidate Expires: 0
如果你也不打算管HTTP 1.0代理,那么你可以無視Expires
Cache-Control: no-store, must-revalidate
如果服務(wù)器自動(dòng)包含有效的Date標(biāo)頭,則理論上也可以省略Cache-Control,并僅依賴于Expires。不過如果客戶端和服務(wù)端時(shí)間有差別,就可能會(huì)失敗哦
Date: Wed, 24 Aug 2016 18:32:02 GMT Expires: 0
總的來說還是使用Cache-Control最妥妥的(如果不打算考慮HTTP 1.0)
項(xiàng)目實(shí)踐 更新文件&棄用緩存在項(xiàng)目中,當(dāng)我們使用本地緩存后又會(huì)遇到另一個(gè)問題——如何更新文件、棄用緩存。
通常,我們通過對(duì)文件名加入指紋來實(shí)現(xiàn)。
以webpack為例,
寫配置文件時(shí)
{ output: { filename: "bundle.[hash].js" } }
為打包后的文件名加上hash,使文件更新之后會(huì)生成新的hash,以達(dá)到棄用原來緩存的效果。
定制緩存策略可以為不同類型的文件定義不同的緩存策略,以達(dá)到最高效的結(jié)果
將HTML被標(biāo)記為“no-cache”,使瀏覽器在每次請(qǐng)求時(shí)都始終會(huì)重新驗(yàn)證文檔,并在內(nèi)容變化時(shí)能夠及時(shí)獲取最新版本,即使下載新資源。
允許瀏覽器和中間緩存(如CDN)緩存CSS,并將CSS設(shè)置為1年后到期,超長(zhǎng)的緩存時(shí)間可以讓用戶避免每次都從服務(wù)端獲取響應(yīng)。同時(shí)不要忘記給文件名加上指紋,以便及時(shí)更新改動(dòng)
JavaScript同樣設(shè)置為1年后到期,但標(biāo)記為private,因?yàn)樗赡軙?huì)包含某些用戶私人數(shù)據(jù),這是CDN不應(yīng)緩存的。
圖像緩存時(shí)不包含版本或唯一指紋,并設(shè)置為1天后到期。
其他技巧減少對(duì)Cookie的依賴,因?yàn)槊看蜨TTP請(qǐng)求都會(huì)帶上Cookie,這回增大傳輸流量(當(dāng)然將靜態(tài)資源掛載在其他域名下,也可以達(dá)到cookie free的效果)
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/61886.html
摘要:前言緩存探究第一彈中我們講了一些緩存的基礎(chǔ)知識(shí)和策略。第二彈我們來講講如何實(shí)際在項(xiàng)目中配置。在緩存探究第一彈定制緩存策略中已經(jīng)提到對(duì)于最好標(biāo)記為不緩存,以便及時(shí)獲取最新的靜態(tài)資源版本。 前言 WEB緩存探究第一彈中我們講了一些WEB緩存的基礎(chǔ)知識(shí)和策略。第二彈我們來講講如何實(shí)際在項(xiàng)目中配置。 實(shí)戰(zhàn) 鑒于叉燒包本包是個(gè)前端,所以我們就以HTML和Node為例開始showImg(https...
摘要:前言緩存探究第一彈中我們講了一些緩存的基礎(chǔ)知識(shí)和策略。第二彈我們來講講如何實(shí)際在項(xiàng)目中配置。在緩存探究第一彈定制緩存策略中已經(jīng)提到對(duì)于最好標(biāo)記為不緩存,以便及時(shí)獲取最新的靜態(tài)資源版本。 前言 WEB緩存探究第一彈中我們講了一些WEB緩存的基礎(chǔ)知識(shí)和策略。第二彈我們來講講如何實(shí)際在項(xiàng)目中配置。 實(shí)戰(zhàn) 鑒于叉燒包本包是個(gè)前端,所以我們就以HTML和Node為例開始showImg(https...
摘要:前言緩存探究第一彈中我們講了一些緩存的基礎(chǔ)知識(shí)和策略。第二彈我們來講講如何實(shí)際在項(xiàng)目中配置。在緩存探究第一彈定制緩存策略中已經(jīng)提到對(duì)于最好標(biāo)記為不緩存,以便及時(shí)獲取最新的靜態(tài)資源版本。 前言 WEB緩存探究第一彈中我們講了一些WEB緩存的基礎(chǔ)知識(shí)和策略。第二彈我們來講講如何實(shí)際在項(xiàng)目中配置。 實(shí)戰(zhàn) 鑒于叉燒包本包是個(gè)前端,所以我們就以HTML和Node為例開始showImg(https...
摘要:前言緩存探究第一彈中我們講了一些緩存的基礎(chǔ)知識(shí)和策略。第二彈我們來講講如何實(shí)際在項(xiàng)目中配置。在緩存探究第一彈定制緩存策略中已經(jīng)提到對(duì)于最好標(biāo)記為不緩存,以便及時(shí)獲取最新的靜態(tài)資源版本。 前言 WEB緩存探究第一彈中我們講了一些WEB緩存的基礎(chǔ)知識(shí)和策略。第二彈我們來講講如何實(shí)際在項(xiàng)目中配置。 實(shí)戰(zhàn) 鑒于叉燒包本包是個(gè)前端,所以我們就以HTML和Node為例開始showImg(https...
摘要:為了提升網(wǎng)站性能,有效利用緩存能夠提升用戶體驗(yàn),提高訪問效率。同時(shí)不要忘記給文件名加上指紋,以便及時(shí)更新改動(dòng)同樣設(shè)置為年后到期,但標(biāo)記為,因?yàn)樗赡軙?huì)包含某些用戶私人數(shù)據(jù),這是不應(yīng)緩存的。圖像緩存時(shí)不包含版本或唯一指紋,并設(shè)置為天后到期。 前言 由于項(xiàng)目越來越大,即使了使用代碼壓縮工具減少文件大小,js文件還是不可避免的越變?cè)酱蟆6鴮?duì)于用戶來說每次重新下載都有可能會(huì)消耗大量時(shí)間,讓我們...
閱讀 1003·2023-04-25 14:20
閱讀 1879·2021-11-24 10:20
閱讀 3783·2021-11-11 16:55
閱讀 2928·2021-10-14 09:42
閱讀 3478·2019-08-30 15:56
閱讀 1180·2019-08-30 15:55
閱讀 1077·2019-08-30 15:44
閱讀 787·2019-08-29 11:28