淺析瀏覽器緩存

通過最近一段時(shí)間的pc開發(fā), 總結(jié)一下自己對瀏覽器緩存的認(rèn)知, 熟練的掌握瀏覽器緩存, 可以加快頁面加載速度, 提升用戶體驗(yàn).在開始前, 大家需要對以下知識點(diǎn)了解:

http status:200,200(from disk/memory cache),304,404等
強(qiáng)緩存(Pragma湿颅、Expires虫给,cache-control)
對比緩存(If-None-Match/Etag ,If-Modified-Since/Last-Modified)

Pragma與Expires是http1.0時(shí),用來控制強(qiáng)緩存:
Pragma:no-cache,代表此資源不會(huì)被瀏覽器從緩存中取曲秉,每次從服務(wù)器獲取惯疙,返回狀態(tài)碼為 200欺旧;(現(xiàn)在瀏覽器基本上全在用http1.1昔汉,所以此屬性基本上不再用)
Expires: Wed, 12 Jul 2017 06:23:33 GMT,值為一個(gè)格林時(shí)間,代表著此資源過期時(shí)間嘁灯,瀏覽器會(huì)比較當(dāng)前時(shí)間與此時(shí)間(此時(shí)間是相對服務(wù)器時(shí)間泻蚊,如果修改了客戶端時(shí)間,則這個(gè)比較就不準(zhǔn)確),如果沒有超過旁仿,則使用緩存藕夫,返回200(from cache)
cache-control是http1.1時(shí)孽糖,用來控制強(qiáng)緩存枯冈,更好的解決Expires不嚴(yán)謹(jǐn)?shù)膯栴}。
cache-control:public办悟,代表此資源可以緩存在代理服務(wù)器上尘奏,供多個(gè)客戶端共享
cache-control:private,代表此資源只能供客戶端緩存
cache-control:max-age=3600,代表3600秒后再次請求此資源病蛉,此資源緩存失效
cache-control:no-cache炫加,強(qiáng)緩存失效瑰煎,需要去判斷對比緩存
cache-control:no-store,強(qiáng)緩存與對比緩存均失效,需要請求服務(wù)器資源
以上3個(gè)字段優(yōu)先級:Pragma>cache-control>Expires

If-None-Match/Etag ,If-Modified-Since/Last-Modified俗孝,是用來控制對比緩存的酒甸,
其中:
If-Modified-Since/Last-Modified值為一個(gè)格林時(shí)間,Last-Modified代表此資源在服務(wù)器上最后一次修改時(shí)間赋铝,If-Modified-Since存著上一次請求服務(wù)器獲取該資源插勤,該資源的最后一次修改時(shí)間,當(dāng)我們進(jìn)行對比緩存的時(shí)候革骨,就會(huì)比較If-Modified-Since/Last-Modified這2個(gè)時(shí)間农尖,如果Last-Modified大于If-Modified-Since,說明資源又發(fā)生了新的改變良哲,此時(shí)獲取最新資源盛卡,并返回200,反之代表資源未發(fā)生改變返回304筑凫,繼續(xù)使用緩存的資源滑沧。(需要注意可能資源在1秒內(nèi)發(fā)生了多次改變,那么就會(huì)出現(xiàn)服務(wù)器認(rèn)為資源未發(fā)生改變繼續(xù)返回304漏健,或者資源定期生成嚎货,但內(nèi)容未發(fā)生改變,這個(gè)時(shí)候服務(wù)器就會(huì)認(rèn)為發(fā)生改變蔫浆,重新請求)殖属。
If-None-Match/Etag值是基于對應(yīng)資源生成的唯一標(biāo)識符,更好的解決If-Modified-Since/Last-Modified不嚴(yán)謹(jǐn)?shù)膯栴}瓦盛。If-None-Match存著上一次請求服務(wù)器獲取該資源洗显,該資源對應(yīng)的Etag值,當(dāng)我們進(jìn)行對比緩存的時(shí)候原环,就會(huì)比較If-None-Match與Etag值是否相等挠唆,相等代表此資源未發(fā)生改變,返回304嘱吗,反之重新請求此資源返回200玄组。(但是需要注意如果服務(wù)器采用分布式負(fù)載均衡時(shí),每臺服務(wù)器對同一個(gè)資源生成的Etag值可能會(huì)不相同谒麦,導(dǎo)致比較Etag與If-None-Match不相同俄讹,重新請求資源)。
以上2組優(yōu)先級:If-None-Match/Etag >If-Modified-Since/Last-Modified
結(jié)合著以上內(nèi)容我們可以得到如下結(jié)論:

一. 當(dāng)瀏覽器第一次請求資源的時(shí)候绕德,因?yàn)闊o緩存患膛,所以服務(wù)器成功返回此資源,狀態(tài)碼為200耻蛇,并且此時(shí)返回Expires ,cache-control,Etag, Last-Modified

image.png
image.png

二. 當(dāng)瀏覽器第二次請求該資源時(shí)踪蹬,因?yàn)橛芯彺姘耍瑸g覽器首先會(huì)判斷強(qiáng)緩存是否有效,判斷規(guī)則如上所述跃捣,如果強(qiáng)緩存有效漱牵,返回200(from cache),如果此時(shí)強(qiáng)緩存失效,就會(huì)進(jìn)行對比緩存疚漆,判斷對比緩存是否失效布疙,判斷規(guī)則如上所述,如果對比緩存有效愿卸,返回304(not modified),如果失效灵临,就會(huì)請求服務(wù)器獲取最新資源,此時(shí)狀態(tài)碼為200趴荸,同時(shí)返回新的Expires ,cache-control,Etag, Last-Modified


image.png

image.png

image.png

image.png

PS:200from cache可以分為2種儒溉,(from disk/memory cache),顧名思義我們可以得出发钝,前者是從磁盤中獲取緩存顿涣,后者是從內(nèi)存中獲取緩存,一般來說酝豪,html/js/css這類資源當(dāng)屬于200from disk cache涛碑,而像比如html中所用的圖片和字體引用資源來自于memory cache,磁盤緩存當(dāng)進(jìn)程關(guān)閉孵淘,仍會(huì)存在蒲障,而內(nèi)存緩存會(huì)在進(jìn)程關(guān)閉后清空。
如下:
Js/html/css


image.png

image.png

Img/font


image.png

image.png

最后結(jié)合我們經(jīng)常對瀏覽器頁面操作瘫证,來看緩存:
當(dāng)我們第一次請求頁面后揉阎,在地址欄后按Enter鍵的時(shí)候,不會(huì)影響Expirse和cache-control背捌,If-None-Match/Etag >If-Modified-Since/Last-Modified
image.png

image.png

當(dāng)我們第一次請求頁面后毙籽,按F5刷新,Expirse和cache-control失效毡庆,不會(huì)影響If-None-Match/Etag >If-Modified-Since/Last-Modified


image.png

image.png

當(dāng)我們第一次請求頁面后坑赡,按Ctrl+F5刷新, Expirse和cache-control么抗,If-None-Match/Etag >If-Modified-Since/Last-Modified均會(huì)失效
image.png

image.png

最后我們可以在html的meta標(biāo)簽內(nèi)禁用所有緩存, 可是如果加了這個(gè)標(biāo)簽,那么代表著此html本身就不允許緩存, 那么我們再談瀏覽器緩存就沒有意義了, 如圖:
image.png

以上就是本人對于瀏覽器緩存的理解, 歡迎一起討論交流.

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末毅否,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子乖坠,更是在濱河造成了極大的恐慌搀突,老刑警劉巖刀闷,帶你破解...
    沈念sama閱讀 217,509評論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件熊泵,死亡現(xiàn)場離奇詭異仰迁,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)顽分,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,806評論 3 394
  • 文/潘曉璐 我一進(jìn)店門徐许,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人卒蘸,你說我怎么就攤上這事雌隅。” “怎么了缸沃?”我有些...
    開封第一講書人閱讀 163,875評論 0 354
  • 文/不壞的土叔 我叫張陵恰起,是天一觀的道長。 經(jīng)常有香客問我趾牧,道長检盼,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,441評論 1 293
  • 正文 為了忘掉前任翘单,我火速辦了婚禮吨枉,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘哄芜。我一直安慰自己貌亭,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,488評論 6 392
  • 文/花漫 我一把揭開白布认臊。 她就那樣靜靜地躺著圃庭,像睡著了一般。 火紅的嫁衣襯著肌膚如雪失晴。 梳的紋絲不亂的頭發(fā)上冤议,一...
    開封第一講書人閱讀 51,365評論 1 302
  • 那天,我揣著相機(jī)與錄音师坎,去河邊找鬼恕酸。 笑死,一個(gè)胖子當(dāng)著我的面吹牛胯陋,可吹牛的內(nèi)容都是我干的蕊温。 我是一名探鬼主播,決...
    沈念sama閱讀 40,190評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼遏乔,長吁一口氣:“原來是場噩夢啊……” “哼义矛!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起盟萨,我...
    開封第一講書人閱讀 39,062評論 0 276
  • 序言:老撾萬榮一對情侶失蹤凉翻,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后捻激,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體制轰,經(jīng)...
    沈念sama閱讀 45,500評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡前计,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,706評論 3 335
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了垃杖。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片男杈。...
    茶點(diǎn)故事閱讀 39,834評論 1 347
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖调俘,靈堂內(nèi)的尸體忽然破棺而出伶棒,到底是詐尸還是另有隱情,我是刑警寧澤彩库,帶...
    沈念sama閱讀 35,559評論 5 345
  • 正文 年R本政府宣布肤无,位于F島的核電站,受9級特大地震影響骇钦,放射性物質(zhì)發(fā)生泄漏舅锄。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,167評論 3 328
  • 文/蒙蒙 一司忱、第九天 我趴在偏房一處隱蔽的房頂上張望皇忿。 院中可真熱鬧,春花似錦坦仍、人聲如沸鳍烁。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,779評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽幔荒。三九已至,卻和暖如春梳玫,著一層夾襖步出監(jiān)牢的瞬間爹梁,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,912評論 1 269
  • 我被黑心中介騙來泰國打工提澎, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留姚垃,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,958評論 2 370
  • 正文 我出身青樓盼忌,卻偏偏與公主長得像积糯,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子谦纱,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,779評論 2 354

推薦閱讀更多精彩內(nèi)容

  • 瀏覽器對于請求資源, 流程如圖所示: 可以看到瀏覽器的緩存機(jī)制分為兩個(gè)部分: 1看成、當(dāng)前緩存是否過期? 2跨嘉、服務(wù)器中...
    zhoulujun閱讀 1,204評論 0 3
  • 今天看奇舞團(tuán)推了篇文章講緩存策略的川慌,講的挺不錯(cuò),記錄一下。 原文地址就在下面梦重。 總結(jié): 緩存分為強(qiáng)緩存和協(xié)商緩存...
    NowhereToRun閱讀 4,819評論 1 7
  • 轉(zhuǎn)載:瀏覽器緩存知識小結(jié)及應(yīng)用 閱讀目錄 1. 瀏覽器緩存基本認(rèn)識 2. 強(qiáng)緩存的原理 3. 強(qiáng)緩存的管理 4. ...
    meng_philip123閱讀 1,089評論 4 18
  • 0 前言 在前端開發(fā)中兑燥,性能一直都是被大家所重視的一點(diǎn),然而判斷一個(gè)網(wǎng)站的性能最直觀的就是看網(wǎng)頁打開的速度忍饰。其中提...
    七寸知架構(gòu)閱讀 8,961評論 7 58
  • `` 字符串模板 ${變量名稱}代替字符串拼接字符串查找str.indexOf(str) 返回索引,沒找到返回值 ...
    _海角_閱讀 395評論 0 0