概念 瀏覽器緩存是瀏覽器端保存數據用於快速讀取或避免重複優化機制.前端
緩存類別 前端緩存主要分爲http緩存和瀏覽器緩存,其中http緩存是在http進行傳輸的時候的緩存,主要在服務器上設置,而瀏覽器緩存則是存儲的客戶端的,能夠經過js對瀏覽器的存儲進行操做 web
緩存優勢http緩存分爲強制緩存和協商緩存
複製代碼
強制緩存(本身強制決定)就是向瀏覽器緩存查找該請求結果,而且根據該結果的緩存規則決定是否使用該緩存結果,強制緩存的狀況主要有三種:sql
瀏覽器在向服務器發送http請求的時候,服務器會將緩存規則返給http響應報文的http頭和請求結果一塊兒返回給瀏覽器,其中控制強制緩存的字段分別是Expires和Cache-Control,其中Cache-Control優先級比Expires高。chrome
在HTTP/1.1中,Cache-Control是最重要的規則,主要用於控制網頁緩存,主要取值爲:
public:全部內容都將被緩存(客戶端和代理服務器均可緩存)
private:全部內容只有客戶端能夠緩存,Cache-Control的默認取值
no-cache:客戶端緩存內容,可是是否使用緩存則須要通過協商緩存來驗證決定
no-store:全部內容都不會被緩存,即不使用強制緩存,也不使用協商緩存
max-age=xxx (xxx is numeric):緩存內容將在xxx秒後失效
複製代碼
協商緩存就是強制緩存失效後,瀏覽器攜帶緩存標識向服務器發起請求,由服務器根據緩存標識決定是否使用緩存的過程,主要有如下兩種狀況: 1)協商緩存生效,返回304,數據庫
2)協商緩存失效,返回200和請求結果結果一樣,協商緩存的標識也是在響應報文的HTTP頭中和請求結果一塊兒返回給瀏覽器的,控制協商緩存的字段分別有:Last-Modified / If-Modified-Since和Etag / If-None-Match,其中Etag / If-None-Match的優先級比Last-Modified / If-Modified-Since高。
複製代碼
強制緩存優先於協商緩存進行,若強制緩存(Expires和Cache-Control)生效則直接使用緩存,若不生效則進行協商緩存(Last-Modified / If-Modified-Since和Etag / If-None-Match),協商緩存由服務器決定是否使用緩存,若協商緩存失效,那麼表明該請求的緩存失效,從新獲取請求結果,再存入瀏覽器緩存中;生效則返回304,繼續使用緩存,主要過程以下:後端
cookie瀏覽器
1)http是一種無狀態的協議,因此每次客戶端請求服務器的時候都是'初次見面',因此每次接收用戶請求時,都是沒法肯定用戶的身份,
2)爲了解決這個無狀態問題,會在登陸成功時,服務端再響應頭中存儲着cookie信息服務端給用戶下發cookie的數據(假設是一張小票),
3)等之後用戶再請求服務端時,帶着小票一塊兒發送過去(自動),服務端檢測小票的信息便可判斷這個用戶使用訪問過
複製代碼
cookie的數據是存儲在客戶端的,存儲容量只有4k緩存
cookie能完成的部分應用,還有更多的功能須要全局變量。cookie的缺點主要集中於安全性和隱私保護。主要包括如下幾種:安全
session實現方式:性能優化
好處:確保數據沒法被用戶操做,安全
localStorage
LocalStorage的數據將一直保存在瀏覽器內,直到用戶清除瀏覽器緩存數據爲止。存儲容量爲5M
sessionStorage
HTML5的應用緩存(application cache),或者簡稱爲 appcache,是專門爲開發離線 Web 應用而設計 的。Appcache就是從瀏覽器的緩存中分出來的一塊緩存區。要想在這個緩存中保存數據,可使用一個 描述文件(manifest file),列出要下載和緩存的資源
webSql(被廢棄)
websql這種方式只有較新的chrome瀏覽器支持,並以一個獨立規範形式出現,主要有如下特色 Web Sql 數據庫API 實際上不是HTML5規範的組成部分; 在HTML5以前就已經存在了,是單獨的規範; 它是將數據以數據庫的形式存儲在客戶端,根據需求去讀取;
跟Storage的區別是:
websql API主要包含三個核心方法:
indexDB(非關係型數據庫)
IndexedDB 是一個爲了可以在客戶端存儲可觀數量的結構化數據,而且在這些數據上使用索引進行高性能檢索的 API。雖然 DOM 存儲 對於存儲少許數據是很是有用的,可是它對大量結構化數據的存儲就顯得力不從心了。IndexedDB 則提供了這樣的一個解決方案。 IndexedDB 分別爲同步和異步訪問提供了單獨的 API 。同步 API 原本是要用於僅供 Web Workers 內部使用,可是尚未被任何瀏覽器所實現。異步 API 在 Web Workers 內部和外部均可以使用,另外瀏覽器可能對indexDB有50M大小的限制,通常用戶保存大量用戶數據並要求數據之間有搜索須要的場景。 異步API
往返緩存又稱爲BFCache,是瀏覽器在前進後退按鈕上爲了提高歷史頁面的渲染速度的一種策略。該策略具體表現爲,當用戶前往新頁面時,將當前頁面的瀏覽器DOM狀態保存到bfcache中;當用戶點擊後退按鈕的時候,將頁面直接從bfcache中加載,節省了網絡請求的時間。