2016-08-09 64 views

回答

85

注意:As of Firefox 57,默認行爲已更改爲佔updated service worker specification。在Firefox 57+中,默認情況下,在檢查服務工作者腳本的更新時,HTTP緩存指令將被忽略。下面還描述適用於Chrome瀏覽器在10月份2017

的每一個在導航到一個新的頁面,下一個服務人員的範圍的Chrome瀏覽器會爲這是在以通過JavaScript的資源標準的HTTP請求致電navigator.serviceWorker.register()。我們假設它的名字是service-worker.js。該請求僅與導航結合使用,或者服務人員通過例如push事件喚醒。有而不是後臺進程,每24小時重新提交每個服務工作人員腳本,或任何類似的自動化。

該HTTP請求將服從標準HTTP cache directives,但有一個例外(下一段將介紹該例外)。例如,如果您的服務器設置了適當的HTTP響應頭,表明緩存的響應應該使用1小時,那麼在接下來的一小時內,瀏覽器對service-worker.js的請求將由瀏覽器的緩存滿足。請注意,我們不是在談論Cache Storage API,這是不相關的在這種情況下,而是standard browser HTTP caching

標準HTTP緩存規則的一個例外是24小時的事情,如果HTTP緩存中的service-worker.js條目的年齡大於24小時,那麼瀏覽器將始終訪問網絡。因此,在功能上,使用1天或1周或1年的max-age沒有區別 - 它們都將被視爲max-age爲1天。

瀏覽器供應商希望確保開發人員不會意外推出一個「破損」或有缺陷的service-worker.js,該服務的max-age爲1年,讓用戶長時間處於可持續的,破損的網絡體驗的時間。 (您不能依賴您的用戶知道清除他們的站點數據或移動 - 重新加載站點。)

某些開發人員更願意明確地爲其service-worker.js提供響應標頭,導致禁用所有HTTP緩存,這意味着每個導航都會爲service-worker.js發出網絡請求。另一種方法可能是使用非常非常短的max-age-每分鐘一次 - 以便在來自單個用戶的大量快速導航的情況下提供某種程度的節流。如果您真的想盡量減少請求並確信您不會立即更新service-worker.js,那麼您可以自由設置24小時的max-age,但我建議您在短時間內使用更短的內容,以免意外需要重新部署。

+0

感謝傑夫的很好的解釋。澄清了所有疑問。 –

+0

如果服務工作者調用在提取和緩存中被攔截,會發生什麼情況。這是否也會在一天後過期。 – Pankaj

+1

當頁面請求服務工作者腳本註冊時,服務工作人員的'fetch'事件處理程序不會被觸發。 –