前言
Progressive Web Application (PWA) 中的 Service Worker 就像是 Proxy 一樣,可以居中協調 Client 與 Server 間的行為。
一般通常是連到某個頁面時,一併將它 Cache 下來,也可以一開始時,就將全部的程式框架(App Shell)給 Cache 下來。
實作
設定要 CacheName 及 預先 cache 的檔案清單
以下程式都在 Service Worker JS 之中
另外,除了要 Cache 的檔案清單外,也可以指定某些檔案不要 Cache
1 | var cacheName = 'PWASample-v1'; |
Service Worker Install 時,Cache 這些檔案
呼叫 cache.addAll(檔案清單Array) 就會將那些檔案加入 Cache 之中
1 | self.addEventListener("install", (event) => { |
設定 Fetch 的策略
我們可以決定使用 Cache First(有 Cache 就不連到 Server 端取) or Network First(先到 Server端取,沒有才到 Cache 找)
1 |
|
Fetch 時,依需要使用不同的策略
1 | self.addEventListener('fetch', (event) => { |
清除其他 Cache
在 activate event 中將舊的 Cache 清除
1 | self.addEventListener("activate", (event) => { |
驗證
因為一開始就將各頁面 Cache 下來,所以可以發現雖然開啟第一頁,但實際上已 Fetch 其他的頁面進 Cache 了,
將 Chrome 網路設定成 Offline ,可發現先前瀏覽過的頁面,已經被 Cache 下來,所以還是可以正常顯示畫面。
測試範例請參考 PWA Sample.
參考資源
The Offline Cookbook
Browsers support and limitation towards PWA
PWA Sample