瀏覽器緩存機(jī)制

瀏覽器包含哪些存儲(chǔ)機(jī)制?

cookie愿阐、webStorage以及IndexedDB

cookie的存在更多的是為了讓服務(wù)端區(qū)別用戶盒蟆,webStorage和IndexedDB則更多用在保存具體的數(shù)據(jù)和在客戶端存儲(chǔ)大量結(jié)構(gòu)化數(shù)據(jù)(文件/blobs)上面。

緩存 請(qǐng)求資源的副本

好處

  1. 緩解服務(wù)器壓力(不用每次去請(qǐng)求資源);
  2. 提升性能(打開(kāi)本地資源速度當(dāng)然比請(qǐng)求回來(lái)再打開(kāi)要快得多);
  3. 減少帶寬消耗(我相信你可以理解)臭胜;

瀏覽器緩存,代理服務(wù)器緩存

緩存在宏觀上可以分成兩類(lèi):私有緩存共享緩存对竣。共享緩存就是那些能被各級(jí)代理緩存的緩存庇楞。私有緩存就是用戶專享的榜配,各級(jí)代理不能緩存的緩存

緩存過(guò)程分析

cache.png

由上圖我們可以知道:

瀏覽器每次發(fā)起請(qǐng)求否纬,都會(huì)先在瀏覽器緩存中查找該請(qǐng)求的結(jié)果以及緩存標(biāo)識(shí)

瀏覽器每次拿到返回的請(qǐng)求結(jié)果都會(huì)將該結(jié)果和緩存標(biāo)識(shí)存入瀏覽器緩存中

以上兩點(diǎn)結(jié)論就是瀏覽器緩存機(jī)制的關(guān)鍵,他確保了每個(gè)請(qǐng)求的緩存存入與讀取蛋褥,只要我們?cè)倮斫鉃g覽器緩存的使用規(guī)則临燃,那么所有的問(wèn)題就迎刃而解了,本文也將圍繞著這點(diǎn)進(jìn)行詳細(xì)分析。為了方便大家理解膜廊,這里我們根據(jù)是否需要向服務(wù)器重新發(fā)起HTTP請(qǐng)求將緩存過(guò)程分為兩個(gè)部分乏沸,分別是強(qiáng)制緩存和協(xié)商緩存。

HTTP協(xié)議里定義了很多關(guān)于緩存的請(qǐng)求和響應(yīng)字段
瀏覽器對(duì)于緩存的處理是根據(jù)第一次請(qǐng)求資源時(shí)返回的響應(yīng)頭來(lái)確定的爪瓜。

Age:23146
Cache-Control:max-age=2592000 // HTTP 1.1 緩存過(guò)期相對(duì)時(shí)間蹬跃,優(yōu)先級(jí)高
Date:Tue, 28 Nov 2017 12:26:41 GMT
ETag:W/"5a1cf09a-63c6" // 對(duì)文件的標(biāo)記
Expires:Thu, 28 Dec 2017 05:27:45 GMT  // HTTP 1.0 緩存過(guò)期絕對(duì)時(shí)間
Last-Modified:Tue, 28 Nov 2017 05:14:02 GMT // 文件最后一次修改時(shí)間
Vary:Accept-Encoding

強(qiáng)緩存階段

強(qiáng)制緩存就是向?yàn)g覽器緩存查找該請(qǐng)求結(jié)果,并根據(jù)該結(jié)果的緩存規(guī)則來(lái)決定是否使用該緩存結(jié)果的過(guò)程铆铆,強(qiáng)制緩存的情況主要有三種

  • 不存在緩存標(biāo)識(shí):直接請(qǐng)求
  • 存在緩存標(biāo)識(shí)蝶缀,但結(jié)果失效:協(xié)商緩存
  • 存在緩存標(biāo)識(shí),且結(jié)果未失效:直接返回結(jié)果
// 與上述的Last-Modified薄货,ETag對(duì)應(yīng)翁都,If優(yōu)先級(jí)低
If-Moified-Since: Tue, 28 Nov 2017 05:14:02 GMT
If-None-Match: W/"5a1cf09a-63c6"

協(xié)商緩存階段

過(guò)期后進(jìn)入?yún)f(xié)商緩存階段

請(qǐng)求攜帶這兩個(gè)字段,服務(wù)器以此判斷資源是否修改

修改:返回200 和新的內(nèi)容

未修改:返回304 加載本地緩存(Chrome谅猾,firefox不會(huì))

啟發(fā)式緩存階段

Age:23146
Cache-Control: public
Date:Tue, 28 Nov 2017 12:26:41 GMT
Last-Modified:Tue, 28 Nov 2017 05:14:02 GMT
Vary:Accept-Encoding

確定緩存過(guò)期時(shí)間的字段一個(gè)都沒(méi)有柄慰!

根據(jù)響應(yīng)頭中2個(gè)時(shí)間字段 Date 和 Last-Modified 之間的時(shí)間差值,取其值的10%作為緩存時(shí)間周期税娜。

flowChart.png

Expires有一個(gè)很大的弊端坐搔,就是它返回的是服務(wù)器的時(shí)間,但判斷的時(shí)候用的卻是客戶端的時(shí)間

If-Unmodified-Since

這個(gè)字段字面意思和If-Modified-Since相反巧涧,但處理方式并不是相反的薯蝎。如果文件在兩次訪問(wèn)期間沒(méi)有被修改則返回200和資源,如果文件修改了則返回狀態(tài)碼412(預(yù)處理錯(cuò)誤)谤绳。

用途:

  • 與含有 If-Range消息頭的范圍請(qǐng)求搭配使用占锯,實(shí)現(xiàn)斷點(diǎn)續(xù)傳的功能,即如果資源沒(méi)修改繼續(xù)下載缩筛,如果資源修改了消略,續(xù)傳的意義就沒(méi)有了。
  • POST瞎抛、PUT請(qǐng)求中艺演,優(yōu)化并發(fā)控制,即當(dāng)多用戶編輯用一份文檔的時(shí)候桐臊,如果服務(wù)器的資源已經(jīng)被修改胎撤,那么在對(duì)其作出編輯會(huì)被拒絕提交

Last-Modified有幾個(gè)缺點(diǎn):沒(méi)法準(zhǔn)確的判斷資源是否真的修改了,比如某個(gè)文件在1秒內(nèi)頻繁更改了多次断凶,根據(jù)Last-Modified的時(shí)間(單位是秒)是判斷不出來(lái)的伤提,再比如,某個(gè)資源只是修改了认烁,但實(shí)際內(nèi)容并沒(méi)有發(fā)生變化肿男,Last-Modified也無(wú)法判斷出來(lái)介汹,因此在HTTP/1.1中還推出了ETag這個(gè)字段

https://juejin.im/entry/5ad86c16f265da505a77dca4

https://juejin.im/post/5a6c87c46fb9a01ca560b4d7

https://github.com/frontend9/fe9-interview/issues/29

https://juejin.im/entry/5ad86c16f265da505a77dca4

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市舶沛,隨后出現(xiàn)的幾起案子嘹承,更是在濱河造成了極大的恐慌,老刑警劉巖如庭,帶你破解...
    沈念sama閱讀 211,376評(píng)論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件叹卷,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡坪它,警方通過(guò)查閱死者的電腦和手機(jī)豪娜,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,126評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)哟楷,“玉大人瘤载,你說(shuō)我怎么就攤上這事÷羯茫” “怎么了鸣奔?”我有些...
    開(kāi)封第一講書(shū)人閱讀 156,966評(píng)論 0 347
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)惩阶。 經(jīng)常有香客問(wèn)我挎狸,道長(zhǎng),這世上最難降的妖魔是什么断楷? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,432評(píng)論 1 283
  • 正文 為了忘掉前任锨匆,我火速辦了婚禮,結(jié)果婚禮上冬筒,老公的妹妹穿的比我還像新娘恐锣。我一直安慰自己,他們只是感情好舞痰,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,519評(píng)論 6 385
  • 文/花漫 我一把揭開(kāi)白布土榴。 她就那樣靜靜地躺著,像睡著了一般响牛。 火紅的嫁衣襯著肌膚如雪玷禽。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 49,792評(píng)論 1 290
  • 那天呀打,我揣著相機(jī)與錄音矢赁,去河邊找鬼。 笑死贬丛,一個(gè)胖子當(dāng)著我的面吹牛撩银,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播瘫寝,決...
    沈念sama閱讀 38,933評(píng)論 3 406
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼蜒蕾,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了焕阿?” 一聲冷哼從身側(cè)響起咪啡,我...
    開(kāi)封第一講書(shū)人閱讀 37,701評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎暮屡,沒(méi)想到半個(gè)月后撤摸,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,143評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡褒纲,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,488評(píng)論 2 327
  • 正文 我和宋清朗相戀三年准夷,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片莺掠。...
    茶點(diǎn)故事閱讀 38,626評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡衫嵌,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出彻秆,到底是詐尸還是另有隱情楔绞,我是刑警寧澤,帶...
    沈念sama閱讀 34,292評(píng)論 4 329
  • 正文 年R本政府宣布唇兑,位于F島的核電站酒朵,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏扎附。R本人自食惡果不足惜蔫耽,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,896評(píng)論 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望留夜。 院中可真熱鬧匙铡,春花似錦、人聲如沸碍粥。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,742評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)即纲。三九已至具帮,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間低斋,已是汗流浹背蜂厅。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,977評(píng)論 1 265
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留膊畴,地道東北人掘猿。 一個(gè)月前我還...
    沈念sama閱讀 46,324評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像唇跨,于是被迫代替她去往敵國(guó)和親稠通。 傳聞我的和親對(duì)象是個(gè)殘疾皇子衬衬,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,494評(píng)論 2 348