成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

前端瀏覽器緩存知識梳理

開發 前端
在前端性能優化的方式中,最重要的當然是緩存了,使用好了緩存,對項目有很大的幫助。

 在前端性能優化的方式中,最重要的當然是緩存了,使用好了緩存,對項目有很大的幫助。比如我們訪問網頁時,使用網頁后退功能,會發現加載的非常快,體驗感很好,這就是緩存的力量。

什么是緩存呢?

當我們第一次訪問網站的時候,比如 juejin.cn,電腦會把網站上的圖片和數據下載到電腦上,當我們再次訪問該網站的時候,網站就會從電腦中直接加載出來,這就是緩存。

緩存有哪些好處?

1. 緩解服務器壓力,不用每次都去請求某些數據了。

2.提升性能,打開本地資源肯定會比請求服務器來的快。

3.減少帶寬消耗,當我們使用緩存時,只會產生很小的網絡消耗,至于為什么打開本地資源也會產生網絡消耗,下面會有說明。

Web緩存種類: 數據庫緩存,CDN緩存,代理服務器緩存,瀏覽器緩存。

所謂瀏覽器緩存其實就是指在本地使用的計算機中開辟一個內存區,同時也開辟一個硬盤區作為數據傳輸的緩沖區,然后用這個緩沖區來暫時保存用戶以前訪問過的信息。

瀏覽器緩存過程: 強緩存,協商緩存。

瀏覽器緩存位置一般分為四類: Service Worker-->Memory Cache-->Disk Cache-->Push Cache。

1. 強緩存

強緩存是當我們訪問URL的時候,不會向服務器發送請求,直接從緩存中讀取資源,但是會返回200的狀態碼。

如何設置強緩存?

我們第一次進入頁面,請求服務器,然后服務器進行應答,瀏覽器會根據response Header來判斷是否對資源進行緩存,如果響應頭中expires、pragma或者cache-control字段,代表這是強緩存,瀏覽器就會把資源緩存在memory cache 或 disk cache中。

第二次請求時,瀏覽器判斷請求參數,如果符合強緩存條件就直接返回狀態碼200,從本地緩存中拿數據。否則把響應參數存在request header請求頭中,看是否符合協商緩存,符合則返回狀態碼304,不符合則服務器會返回全新資源。

expires

是HTTP1.0控制網頁緩存的字段,值為一個時間戳,準確來講是格林尼治時間,服務器返回該請求結果緩存的到期時間,意思是,再次發送請求時,如果未超過過期時間,直接使用該緩存,如果過期了則重新請求。

有個缺點,就是它判斷是否過期是用本地時間來判斷的,本地時間是可以自己修改的。

Cache-Control

是HTTP1.1中控制網頁緩存的字段,當Cache-Control都存在時,Cache-Control優先級更高,主要取值為:

public:資源客戶端和服務器都可以緩存。

privite:資源只有客戶端可以緩存。

no-cache:客戶端緩存資源,但是是否緩存需要經過協商緩存來驗證。

no-store:不使用緩存。

max-age:緩存保質期。

Cache-Control使用了max-age相對時間,解決了expires的問題。

pragma

這個是HTTP1.0中禁用網頁緩存的字段,其取值為no-cache,和Cache-Control的no-cache效果一樣。

2. 緩存位置

上面我們說,強緩存我們會把資源房放到memory cache 和 disk cache中,那什么資源放在memory cache,什么資源放在disk cache中?

存存儲圖像和網頁等資源主要緩存在disk cache,操作系統緩存文件等資源大部分都會緩存在memory cache中。具體操作瀏覽器自動分配,看誰的資源利用率不高就分給誰。

可以看到memory cache請求時間都是0ms,這個是不是太神奇了,這方面我來梳理下。

查找瀏覽器緩存時會按順序查找: Service Worker-->Memory Cache-->Disk Cache-->Push Cache。

1. Service Worker 

是運行在瀏覽器背后的獨立線程,一般可以用來實現緩存功能。使用 Service Worker的話,傳輸協議必須為 HTTPS。因為 Service Worker 中涉及到請求攔截,所以必須使用 HTTPS 協議來保障安全。Service Worker 的緩存與瀏覽器其他內建的緩存機制不同,它可以讓我們自由控制緩存哪些文件、如何匹配緩存、如何讀取緩存,并且緩存是持續性的。

2. Memory Cache

內存中的緩存,主要包含的是當前中頁面中已經抓取到的資源,例如頁面上已經下載的樣式、腳本、圖片等。讀取內存中的數據肯定比磁盤快,內存緩存雖然讀取高效,可是緩存持續性很短,會隨著進程的釋放而釋放。一旦我們關閉 Tab 頁面,內存中的緩存也就被釋放了。

3. Disk Cache

存儲在硬盤中的緩存,讀取速度慢點,但是什么都能存儲到磁盤中,比之 Memory Cache 勝在容量和存儲時效性上。

在所有瀏覽器緩存中,Disk Cache 覆蓋面基本是最大的。它會根據 HTTP Herder 中的字段判斷哪些資源需要緩存,哪些資源可以不請求直接使用,哪些資源已經過期需要重新請求。并且即使在跨站點的情況下,相同地址的資源一旦被硬盤緩存下來,就不會再次去請求數據。絕大部分的緩存都來自 Disk Cache。

memory cache 要比 disk cache 快的多。舉個例子:從遠程 web 服務器直接提取訪問文件可能需要500毫秒(半秒),那么磁盤訪問可能需要10-20毫秒,而內存訪問只需要100納秒,更高級的還有 L1緩存訪問(最快和最小的 CPU 緩存)只需要0.5納秒。

很神奇的,我們又看到了一個prefetch cache,這個又是什么呢?

prefetch cache(預取緩存)

link標簽上帶了prefetch,再次加載會出現。

prefetch是預加載的一種方式,被標記為prefetch的資源,將會被瀏覽器在空閑時間加載。

4. Push Cache

Push Cache(推送緩存)是 HTTP/2 中的內容,當以上三種緩存都沒有命中時,它才會被使用。它只在會話(Session)中存在,一旦會話結束就被釋放,并且緩存時間也很短暫,在Chrome瀏覽器中只有5分鐘左右,同時它也并非嚴格執行HTTP頭中的緩存指令。

5. CPU、內存、硬盤

這里提到了硬盤,內存,可能有些小伙伴對硬盤,內存沒什么直觀的概念。

CPU、內存、硬盤都是計算機的主要組成部分。

CPU:中央處理單元(CntralPocessingUit)的縮寫,也叫處理器,是計算機的運算核心和控制核心。電腦靠CPU來運算、控制。讓電腦的各個部件順利工作,起到協調和控制作用。

硬盤:存儲資料和軟件等數據的設備,有容量大,斷電數據不丟失的特點。

內存:負責硬盤等硬件上的數據與CPU之間數據交換處理。特點是體積小,速度快,有電可存,無電清空,即電腦在開機狀態時內存中可存儲數據,關機后將自動清空其中的所有數據。

3. 協商緩存

協商緩存就是強緩存失效后,瀏覽器攜帶緩存標識向服務器發送請求,由服務器根據緩存標識來決定是否使用緩存的過程。

主要有以下兩種情況:

協商緩存生效,返回304

協商緩存失效,返回200和請求結果

如何設置協商緩存?

Last-Modified / If-Modified-Since

Last-Modified是服務器響應請求時,返回該資源文件在服務器最后被修改的時間。

If-Modified-Since則是客戶端再次發起該請求時,攜帶上次請求返回的Last-Modified值,通過此字段值告訴服務器該資源上次請求返回的最后被修改時間。服務器收到該請求,發現請求頭含有If-Modified-Since字段,則會根據If-Modified-Since的字段值與該資源在服務器的最后被修改時間做對比,若服務器的資源最后被修改時間大于If-Modified-Since的字段值,則重新返回資源,狀態碼為200;否則則返回304,代表資源無更新,可繼續使用緩存文件。

Etag / If-None-Match

Etag是服務器響應請求時,返回當前資源文件的一個唯一標識(由服務器生成)。

If-None-Match是客戶端再次發起該請求時,攜帶上次請求返回的唯一標識Etag值,通過此字段值告訴服務器該資源上次請求返回的唯一標識值。服務器收到該請求后,發現該請求頭中含有If-None-Match,則會根據If-None-Match的字段值與該資源在服務器的Etag值做對比,一致則返回304,代表資源無更新,繼續使用緩存文件;不一致則重新返回資源文件,狀態碼為200。

Etag / If-None-Match優先級高于Last-Modified / If-Modified-Since,同時存在則只有Etag / If-None-Match生效。

4. 緩存方案

目前的項目大多使用這種緩存方案的:

  •   HTML: 協商緩存;
  •  css、js、圖片:強緩存,文件名帶上hash。

5. 強緩存與協商緩存的區別

1. 強緩存不發請求到服務器,所以有時候資源更新了瀏覽器還不知道,但是協商緩存會發請求到服務器,所以資源是否更新,服務器肯定知道。

2. 大部分web服務器都默認開啟協商緩存。

6. 刷新對于強緩存和協商緩存的影響

1. 當ctrl+f5強制刷新網頁時,直接從服務器加載,跳過強緩存和協商緩存。

2. 當f5刷新網頁時,跳過強緩存,但是會檢查協商緩存。

3. 瀏覽器地址欄中寫入URL,回車 瀏覽器發現緩存中有這個文件了,不用繼續請求了,直接去緩存拿。(最快) 

 

責任編輯:龐桂玉 來源: 前端大全
相關推薦

2017-09-28 12:03:40

前端

2017-04-26 14:15:35

瀏覽器緩存機制

2019-01-03 13:09:58

瀏覽器緩存原理

2018-08-07 10:44:50

緩存技術瀏覽器

2011-05-06 09:36:16

動態頁面

2020-07-16 08:04:21

瀏覽器緩存策略

2021-08-02 13:05:49

瀏覽器HTTP前端

2017-05-15 13:40:20

瀏覽器http緩存機制

2020-12-29 09:56:29

瀏覽器緩存HTTP

2020-10-29 11:04:28

緩存瀏覽器LocalStorag

2018-11-30 09:00:19

html5cssjavascript

2022-03-11 13:01:27

前端模塊

2012-02-01 13:42:19

2020-03-11 20:42:34

瀏覽器緩存機制

2022-03-24 08:31:25

Web性能優化瀏覽器緩存API封裝

2019-08-16 10:54:03

本地存儲javascripthttp緩存

2012-03-20 11:41:18

海豚瀏覽器

2012-03-19 17:25:22

2012-03-20 11:31:58

移動瀏覽器

2021-07-22 09:55:28

瀏覽器前端緩存
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 在线免费观看视频你懂的 | 欧美中文字幕在线 | 日本久久精品 | 不卡在线视频 | a看片| 国产乱码精品一区二区三区忘忧草 | 亚洲精品一区二区另类图片 | 99免费精品视频 | 天堂网avav | 一级免费视频 | 欧美自拍第一页 | 亚洲一区二区免费视频 | 天天操,夜夜爽 | 日韩在线一区二区 | 亚洲精品日韩欧美 | 国产欧美日韩精品在线观看 | 综合一区 | 精品亚洲国产成av人片传媒 | 毛片韩国| 欧美精品成人 | 亚洲精久 | 粉嫩国产精品一区二区在线观看 | 伊人性伊人情综合网 | 日韩免费在线观看视频 | 99久久婷婷国产亚洲终合精品 | 精品国产乱码久久久久久蜜柚 | 成人影院一区二区三区 | 日韩在线中文字幕 | 日韩手机在线看片 | 碰碰视频 | 国产精品99一区二区 | 国产精品一区在线播放 | 久久久成人免费视频 | 天天艹日日干 | 欧美日韩成人 | 不卡一二三区 | 91精品国产一区二区 | 精品在线一区 | 538在线精品 | 亚洲免费视频网站 | 亚洲视频在线播放 |