caches
這個 API 是針對 Request
Response
的。caches
通常結合 Service Worker
使用,由於請求級別的緩存與具備頁面攔截功能的 Service Worker
最配。html
本週精讀的文章是 cache-api,介紹了瀏覽器緩存接口的基本語法。前端
瀏覽器擁有全局變量 caches
操做緩存。react
caches
包含任意命名空間,能夠經過 caches.open
建立或訪問。git
const myCache = await caches.open("myCache");
經過 add
添加緩存。因爲 caches
緩存是基於請求的,所以參數能夠是一個 URL 地址,或一個完整的 Request 對象:github
// URL only myCache.add("/subscribe"); // Full request object myCache.add(new Request('/subscribe', { method: "GET", headers: new Headers({ 'Content-Type': 'text/html' }), /* more request options */ });
每執行 add
時,瀏覽器都會主動請求並緩存返回的 Response。web
能夠經過 addAll
批量添加緩存:typescript
myCache.addAll(["/subscribe", "/assets/images/profile.png"]);
經過 match
讀取緩存。與 add
相似,參數能夠是 URL 地址或完整 Request 對象,同時支持 matchAll
:後端
const res = await myCache.match("/subscribe");
經過 add
或 put
更新緩存。前端工程化
當某個請求緩存須要更新時,你能夠從新執行 add
操做。api
同時 put
也能夠更新緩存,你能夠手動構造返回值,這樣瀏覽器就不須要發請求了:
const request = new Request("/subscribe"); const fetchResponse = await fetch(request); myCache.put(request, fetchResponse);
經過 delete
銷燬緩存。
你能夠銷燬某個路徑的緩存:
myCache.delete("/subscribe");
也能夠銷燬某個緩存命名空間:
caches.delete("myCache");
能夠利用 addEventListener('fetch')
監聽瀏覽器請求時機,並在匹配到緩存時,直接替換爲返回結果,當緩存不存在時才繼續發請求。
self.addEventListener("fetch", (e) => { e.respondWith( // Check if item exists in cache caches.match(e.request).then((cachedResponse) => { // If found in cache, return cached response if (cachedResponse) return cachedResponse; // If not found, fetch over network return fetch(e.request); }); ); });
筆者利用 caches
API + service worker 實現了純瀏覽器端的後端渲染。
首先基於下面三個基本事實:
put
修改緩存。react-dom/server
能夠在瀏覽器端執行。這三個能力組合一下,咱們真的能夠實現前端 SSR:
react-dom/server
構造一個 SSR 字符串。caches.put
添加當前頁面緩存,將 react-root
部分塞入構造好的 SSR 字符串。前端渲染有幾個好處:
筆者將這套前端渲染能力封裝在 前端工程化工具 Pri 中,開啓配置項useServiceWorker=true
clientServerRender=true
嘗試。
後面有機會單獨選一篇精讀介紹 前端渲染,你也能夠直接參考筆者 簡陋的實現:因爲 service worker 必須存在一個實體文件,所以腳手架會自動生成它,因此你看到的運行代碼是一堆字符串。
前端渲染是一個較爲極端的例子,caches
更多用來緩存簡單的靜態頁面,靜態博文,或者不常常變更的後端接口。
留下一個思考題:你還能想到 caches
的其餘用法嗎?歡迎留言。
討論地址是: 精讀《Caches API》 · Issue #124 · dt-fe/weekly
若是你想參與討論,請點擊這裏,每週都有新的主題,週末或週一發佈。前端精讀 - 幫你篩選靠譜的內容。