浏览器缓存Cache
首先緩存的優(yōu)點是:緩解服務(wù)端壓力;快。
強(qiáng)緩存和協(xié)商緩存
強(qiáng)緩存是從本地緩存數(shù)據(jù)表中去取資源,不向服務(wù)端發(fā)送請求;協(xié)商緩存意思是每次使用緩存前都要和服務(wù)端進(jìn)行確認(rèn)。
從Response Header的Cache-Control的值看緩存規(guī)則(HTTP/1.1):
max-age=xxx 過期時間(重要),過期了走協(xié)商緩存(expire是HTTP1.0的產(chǎn)物,采用絕對時間,已廢棄)
no-cache:不進(jìn)行強(qiáng)緩存(重要),走協(xié)商緩存
no-store 不強(qiáng)緩存,也不協(xié)商緩存,基本不用
public:瀏覽器和代理服務(wù)器都可以緩存
private:資源只能給瀏覽器緩存,不能給代理服務(wù)器緩存
強(qiáng)緩存
強(qiáng)緩存步驟:
- 第一次請求 a.js ,緩存表中沒該信息,直接請求后端服務(wù)器。
- 后端服務(wù)器返回了 a.js ,且 http Response Header中 cache-control 為 max-age=xxxx,所以是強(qiáng)緩存規(guī)則,存入緩存表中。
- 第二次請求 a.js ,緩存表中是max-age, 那么命中強(qiáng)緩存,然后判斷是否過期,如果沒過期,直接讀緩存的a.js,如果過期了,則執(zhí)行協(xié)商緩存的步驟了。
max-age=0和no-cache的區(qū)別:max-age是進(jìn)行強(qiáng)緩存,但過期了,走協(xié)商緩存;no-cache是直接走協(xié)商緩存。兩者效果一樣。
協(xié)商緩存
協(xié)商緩存無論如何都是會向服務(wù)器發(fā)送請求的,只不過,資源未更改時,返回的只是header信息,所以size很小;而資源有更改時,還要返回body數(shù)據(jù),所以size會大。
觸發(fā)條件:1,強(qiáng)緩存(max-age)過期;2,Cache-Control值為no-cache(不強(qiáng)緩存)
每次http返回來 response header 中的 (每個文件都有一個,改動文件時ETag會變)和 Last-Modified(文件的修改時間),在下次請求時在 request header 就把這兩個標(biāo)識帶上(但是名字變了ETag–>If-None-Match,Last-Modified–>If-Modified-Since ),服務(wù)端把帶過來的標(biāo)識,資源目前的標(biāo)識,進(jìn)行對比,然后判斷資源是否更改了。 如果資源沒更改,返回304,瀏覽器讀取本地緩存;如果資源有更改,返回200,返回最新的資源和最新的標(biāo)識。
協(xié)商緩存步驟:
有了Last-Modified,為什么還要有ETag?
主要是為了解決幾個Last-Modified比較難解決的問題:
- 一些文件也許會周期性的更改,但是他的內(nèi)容并不改變(僅僅改變了修改時間),這個時候我們并不希望客戶端認(rèn)為這個文件被修改了,而重新GET;
- 某些文件修改非常頻繁,比如在秒以下的時間內(nèi)進(jìn)行修改,(比方說1s內(nèi)修改了N次),Last-Modified能檢查到的粒度是s級的,這種修改無法判斷(或者說UNIX記錄MTIME只能精確到秒);
- 某些服務(wù)器不能精確的得到文件的最后修改時間。
用戶行為對緩存的影響?
F5 會跳過強(qiáng)緩存規(guī)則,直接走協(xié)商緩存;Ctrl+F5 ,跳過所有緩存規(guī)則,和第一次請求一樣,重新獲取資源。
為什么很多站點第二次打開速度會很快?
如果第二次頁面打開很快,主要原因是第一次加載頁面過程中,緩存了一些耗時的數(shù)據(jù)。
那么,哪些數(shù)據(jù)會被緩存呢?從上面介紹的核心請求路徑可以發(fā)現(xiàn),DNS 緩存和頁面資源緩存這兩塊數(shù)據(jù)是會被瀏覽器緩存的。DNS 緩存主要就是在瀏覽器本地把對應(yīng)的 IP 和域名關(guān)聯(lián)起來。
簡要來說,很多網(wǎng)站第二次訪問能夠秒開,是因為這些網(wǎng)站把很多資源都緩存在了本地,瀏覽器緩存直接使用本地副本來回應(yīng)請求,而不會產(chǎn)生真實的網(wǎng)絡(luò)請求,從而節(jié)省了時間。同時,DNS 數(shù)據(jù)也被瀏覽器緩存了,這又省去了 DNS 查詢環(huán)節(jié)。
如果一個頁面的網(wǎng)絡(luò)加載時間過久,你是如何分析卡在哪個階段的?
1 首先猜測最可能的出問題的地方,網(wǎng)絡(luò)傳輸丟包比較嚴(yán)重,需要不斷重傳。然后通過ping curl看看對應(yīng)的時延高不高。
2 然后通過wireshake看看具體哪里出了問題。
3 假如別人訪問很快,自己電腦很慢,就要看看自己客戶端是否有問題了。
總結(jié)
以上是生活随笔為你收集整理的浏览器缓存Cache的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: VB进度条 游戏血条控件
- 下一篇: 2017年html5行业报告,云适配发布