首先,開局我畫了一張圖,你會對文章有一個大局了解。
今天講的是前端緩存。
前端緩存有3大種:如圖,分為HTTP緩存、瀏覽器緩存、應用程序緩存。
HTTP緩存
我們先來看HTTP緩存:(做下了解)
分為強緩存與協商緩存。
首先看強緩存:
強緩存之Expires:
強緩存之Cache-Control:
參數
說明
public
所有內容都將被緩存(客戶端和代理伺服器都可緩存)
private
內容只緩存到私有緩存中(僅客戶端可以緩存,代理伺服器不可緩存)
no-cache
必須先與伺服器確認返回的響應是否被更改,然後才能使用該響應來滿足後續對同一個網址的請求。因此,如果存在合適的驗證令牌 (ETag),no-cache 會發起往返通信來驗證緩存的響應,如果資源未被更改,可以避免下載。
no-store
所有內容都不會被緩存到緩存或 Internet 臨時文件中
must-revalidation/proxy-revalidation
如果緩存的內容失效,請求必須發送到伺服器/代理以進行重新驗證
max-age=xxx
緩存的內容將在 xxx 秒後失效, 這個選項只在HTTP 1.1可用, 並如果和Last-Modified一起使用時, 優先順序較高
來舉個栗子:
圖中Cache-Control僅指定了max-age,所以默認為private,緩存時間為31536000秒(365天)
也就是說,在365天內再次請求這條數據,都會直接獲取緩存資料庫中的。
協商緩存:(相當於就是瀏覽器與伺服器通過一個值作為更新flag,一個協商一個判斷)
協商緩存之Etag/If-None-Match:
協商緩存之Last-Modified/If-Modified-Since:
那麼Etag和Last-Modified,他們之間有什麼區別呢???
各有優劣!
那強緩存與協商緩存,他們的規則分別是什麼?
強緩存規則:
協商緩存規則:
這兩種緩存的執行流程是怎麼樣的?
怎麼清除緩存?
瀏覽器默認會緩存圖片,css和js等靜態資源,所以開發環境下經常會因為強緩存導致資源沒有及時更新而看不到最新的效果,需要清除緩存可以使用一下幾種方法:
瀏覽器緩存
然後是瀏覽器緩存:(這個前端很多時候會用到)
有本地小容量存儲與本地大容量存儲
小容量的Cookie:
一般用於以下場景:
小容量的LocalStorage:
記錄後只要不手動清除就會一直存在。
小容量的SessionStorage:
僅在本次會話時有效。關閉當然窗口後就沒有了。
Storage的API如下:(localStorage為例,sessionStorage一樣)
保存數據:(3種寫法均可)
寫法1:
localStorage.setItem("key",value)
寫法2:
localStorage["key"]=1
寫法3:
localStorage.key=1
讀取數據:(相對也有3種)
var value=localStorage.getItem("key")
var value=localStorage["key"]
var value=localStorage.key
刪除單個數據:
localStorage.removeItem(key);
刪除所有數據:
localStorage.clear();
得到某個索引的key:
localStorage.key(index);
比較一下Cookie、LocalStorage、sessionStorage的異同:
本地大容量存儲之WebSql:
表保存數據,用sql操作資料庫(寫的是sql語句,懂mysql資料庫的完全不在話下)
創建表:
create table if not exists product(id integer primary key autoincrement,name text not null,price double);
添加一條數據:
insert into product(name,price) values(斗戰聖皇,1.2);
insert into product(name,price) values(布衣神探:最後的證據,0.9);
刪除一條數據:
delete from product where id=2;
更新一條數據:
update product set name=斗戰聖皇第二部,price=0.99 where id=1;
查詢表格:
select * from product;
刪除表格:
drop table IF EXISTS product;
本地大容量存儲之IndexDB:
保存的是對象類型的數據
應用程序緩存
分為應用緩存和PWA
什麼是應用緩存?
頁面基本結構:
舉個栗子:
有網路時:
什麼是PWA?
先了解APP和web網頁存在的一些不足:
APP應用存在的不足:
web網頁存在的不足:
PWA彌補了APP和web網頁存在的一些缺點:
一個簡單的PWA栗子:
視頻例子:
微信號:migufe
Web前端Talk,你身邊的前端助手,值得期待