使用 Workbox 預先快取

Service Worker 的功能之一,就是可在安裝 Service Worker 時將檔案儲存到快取。這稱為「預先快取」。 預先快取功能可在不前往網路的情況下,為瀏覽器提供快取檔案。針對網站離線需要的重要資產,請使用預先快取功能,例如主頁面、樣式、備用圖片和重要指令碼。

為什麼要使用 Workbox?

您可以選擇是否要使用 Workbox 進行預先快取。您可以編寫自己的程式碼,在安裝 Service Worker 時預先快取重要資產。使用 Workbox 的主要優點在於立即可用的版本管控。相較於必須自行管理這些檔案的版本管理和更新,使用 Workbox 更新預先快取資產可減少許多問題。

友善快取資訊清單

預先快取作業的驅動依據為網址清單和每個網址相關聯的版本資訊。總之,這項資訊稱為「預快取資訊清單。資訊清單是「可靠資料來源」,用來表示特定版本網頁應用程式的預先快取中的所有項目狀態。友善快取資訊清單,格式為 Workbox 使用的格式,如下所示:

[{
  url: 'app.abcd1234.js'
}, {
  url: 'offline.svg',
  revision: '7836745f'
}, {
  url: 'index.html',
  revision: '518747aa'
}]

安裝 Service Worker 後,系統會在快取儲存空間中為每個列出的網址建立三個快取項目。第一個資產的網址中已包含版本管理功能 (app 是實際檔案名稱,而 .abcd1234 包含版本資訊,位於副檔名 .js 之前)。Workbox 的建構工具可以偵測這類資訊,並排除修訂版本欄位。其他兩項資產的網址中未包含任何版本管理資訊,因此 Workbox 的建構工具會建立獨立的 revision 欄位,其中包含本機檔案內容的雜湊。

提供友善載入資源

將資產新增至快取只是預先快取故事的一部分,等到資產快取完畢後,他們就必須回應傳出要求。如要這麼做,服務工作站中必須有 fetch 事件監聽器,才能檢查哪些網址已預先快取,並穩定傳回這些快取回應,在程序中略過網路。因為服務工作站會檢查快取是否有回應 (並在網路之前使用這些內容),因此這種做法稱為「快取優先策略

高效率的更新

預先快取資訊清單會提供預期快取狀態的確切表示法;如果資訊清單中的網址/修訂版本組合有所變更,服務工作站就會知道先前的快取項目不再有效,並且需要更新。只需要使用單一網路要求,瀏覽器會在 Service Worker 更新檢查過程中自動發出網路要求,決定哪些預先快取網址需要重新整理。

預先快取資源更新

隨著您推出新版本的網頁應用程式,也需要將先前的預先快取網址保持為最新狀態、預先快取新資產,並刪除過時的項目。只要您在每次重新建構網站時繼續產生完整的預先快取資訊清單,該資訊清單就能隨時做為友善快取狀態的「可靠資料來源」。

如果現有網址含有新修訂版本欄位,或是已在資訊清單中新增或捨棄任何網址,即需要在 installactivate 事件處理常式中執行更新的 Service Worker。舉例來說,如果您對網站進行了部分變更並重新建構,最新的預先快取資訊清單可能會進行以下變更:

[{
  url: 'app.ffaa4455.js'
}, {
  url: 'offline.svg',
  revision: '7836745f'
}, {
  url: 'index.html',
  revision: '518747aa'
}]

這些變更都會告知服務工作站,必須發出新要求才能更新先前快取的項目 ('offline.svg''index.html') 和快取新網址 ('app.ffaa4455.js'),並刪除刪除來清除不再使用的網址 ('app.abcd1234.js')。

實際的「應用程式商店」安裝體驗

預先快取的另一個優點是,可讓使用者在安裝「應用程式商店」以外,難以實現不易實現的體驗。當使用者首次造訪您網路應用程式中的任何頁面時,您可以預先快取顯示網路應用程式「任何」檢視所需的「所有」網址,而不需要等待使用者造訪個別檢視畫面。

使用者安裝應用程式時,期望每個元素都會快速顯示,而不只是他們過去看到的檢視畫面。預先快取可讓網頁應用程式 享有相同的體驗

哪些資產應預先快取?

請參閱「判斷正在載入的內容」指南,瞭解哪些網址最適合預先快取。一般來說,所有提早載入的 HTML、JavaScript 或 CSS,對於顯示指定網頁的基本結構而言至關重要。

建議您避免預先快取之後載入的媒體或其他資產 (除非網頁應用程式功能有必要)。請改用執行階段快取策略,確保這些資產是按時快取的。

請注意,預先快取涉及在使用者的裝置上使用網路頻寬和儲存空間 (就像從應用程式商店安裝應用程式一樣)。開發人員可自行斟酌是否要預先快取資訊清單,避免過期的預載資訊清單。

Workbox 的建構工具會顯示預先快取資訊清單中的項目數量,以及友善載入酬載的總大小。

網頁應用程式可以避免網路長期下來快速節省頻寬費用,進而從長期的預先快取成本中,長期造訪網頁應用程式就能帶來助益。