緩存優(yōu)點
通常所說的Web緩存指的是可以自動保存常見http請求副本的http設備越庇。對于前端開發(fā)者來說,瀏覽器充當了重要角色奉狈。除此外常見的還有各種各樣的代理服務器也可以做緩存卤唉。當Web請求到達緩存時,緩存從本地副本中提取這個副本內容而不需要經過服務器仁期。這帶來了以下優(yōu)點:
緩存減少了冗余的數(shù)據(jù)傳輸桑驱,節(jié)省流量
緩存緩解了帶寬瓶頸問題。不需要更多的帶寬就能更快加載頁面
緩存緩解了瞬間擁塞跛蛋,降低了對原始服務器的要求熬的。
緩存降低了距離延時, 因為從較遠的地方加載頁面會更慢一些赊级。
緩存種類
緩存可以是單個用戶專用的押框,也可以是多個用戶共享的。專用緩存被稱為私有緩存此衅,共享的緩存被稱為公有緩存强戴。
私有緩存
私有緩存只針對專有用戶,所以不需要很大空間挡鞍,廉價骑歹。Web瀏覽器中有內建的私有緩存——大多數(shù)瀏覽器都會將常用資源緩存在你的個人電腦的磁盤和內存中。如Chrome瀏覽器的緩存存放位置就在:C:\Users\Your_Account\AppData\Local\Google\Chrome\User Data\Default中的Cache文件夾和Media Cache文件夾墨微。
公有緩存
公有緩存是特殊的共享代理服務器道媚,被稱為緩存代理服務器或代理緩存(反向代理的一種用途)。公有緩存會接受來自多個用戶的訪問,所以通過它能夠更好的減少冗余流量最域。
下圖中每個客戶端都會重復的向服務器訪問一個資源(此時還不在私有緩存中)谴分,這樣它會多次訪問服務器,增加服務器壓力镀脂。而使用共享的公有緩存時牺蹄,緩存只需要從服務器取一次,以后不用再經過服務器薄翅,能夠顯著減輕服務器壓力沙兰。
事實上在實際應用中通常采用層次化的公有緩存,基本思想是在靠近客戶端的地方使用小型廉價緩存翘魄,而更高層次中鼎天,則逐步采用更大、功能更強的緩存在裝載多用戶共享的資源暑竟。
no-store 絕對禁止緩存任何資源斋射,也就是說每次用戶請求資源時,都會向服務器發(fā)送一個請求但荤,每次都會下載完整的資源罗岖。通常用于機密性資源。
關于Cache-Control的使用纱兑,見下面這張圖(來自大額)
上文的demo中我們見到過服務器端如何驗證Etag:
由于Etag有服務器構造呀闻,所以在集群環(huán)境中一定要保證Etag的唯一性
If-Modified-Since與Last-Modified
這兩個是HTTP1.0中用來驗證資源是否過期的請求/響應頭,這兩個頭部都是日期潜慎,驗證過程與Etag類似捡多,這里不詳細介紹。使用這兩個頭部來驗證資源是否更新時铐炫,存在以下問題:
有些文檔資源周期性的被重寫垒手,但實際內容沒有改變。此時文件元數(shù)據(jù)中會顯示文件最近的修改日期與If-Modified-Since不相同倒信,導致不必要的響應科贬。
有些文檔資源被修改了,但修改內容并不重要鳖悠,不需要所有的緩存都更新(比如代碼注釋)
關于緩存的更新問題榜掌,請大家看看這里張云龍的回答,本文就不詳細展開了乘综。
本文demo代碼如下: