日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 前端技术 > HTML >内容正文

HTML

浏览器缓存Cache

發(fā)布時間:2023/12/14 HTML 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 浏览器缓存Cache 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

首先緩存的優(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)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。