2016-11-19 27 views
0

是否可以讓用戶選擇何時更新服務人員?讓用戶選擇更新服務人員

爲什麼?我想添加經濟模式,這意味着用戶可以選擇節省很多帶寬。當用戶的限制幾乎已滿或他/她在國外使用昂貴的互聯網時,這可能很有用。

這是因爲如果Service Worker更新並且有新資產的版本,它會下載所有這些可能是幾MB的文件。如果距離新月份爲3天和50MB,則每MB計數。


比方說,我可以從localStorage的檢索設定:

const economy = localStorage.getItem(economy) || false 

如何讓服務人員知道,如果經濟是真的應該只更新自己?


我有點意識到,這可能是從長期來看(過時的版本),但林的規劃問題經常騷擾用戶,如果他/她不希望更新。我只想添加供用戶選擇的選項。

回答

2

如果您願意處理installactivate事件之外的緩存條目的更新/刪除(可能只是其中的一部分),那麼您應該在何時觸發它們有更大的靈活性。實際上,您根本不必在服務工作人員中執行更新,如果這樣做最終會讓您更容易的話。個別網頁可以訪問給定源服務工作人員使用的完全相同的Cache Storage API實例。您可以直接從頁面響應任何行動使最適合你,如修改緩存:

// Ensure we have access to the Cache Storage API. 
if ('caches' in window) { 
    // Swap this out for whatever UI element will trigger the update. 
    const el = document.querySelector('#update-caches-button'); 
    el.addEventListener('click',() => { 
    window.caches.open('my-cache').then(cache => { 
     // Add or delete entries from cache. 
    }); 
    }); 
} 

你可以做同樣的事情,但把所有的邏輯在服務工作者,用postMessage()從一個客戶端頁面來觸發服務工作人員的message事件,然後更新message事件處理程序中的高速緩存。

依靠install/activate事件執行緩存管理有一些優點。特別是,您可以依靠服務人員停留在"waiting" state,同時還有其他依賴先前緩存狀態的活動客戶端,並且不必擔心丟棄那些其他客戶端需要的條目或者交換出去新版本的資源預期版本仍在使用中。但作爲一名開發人員,最終您有責任瞭解您的緩存資源的使用方式,以及您在這些緩存中管理的資產是否可能導致問題,如果存在版本不匹配或某些內容已被刪除之後需要通過另一個選項卡從網絡中檢索一個選項卡,然後您可以自由地實施這種方法。

sw-precache中實施預存/更新時,我們考慮過類似的問題。在https://github.com/GoogleChrome/sw-precache/issues/145有一些背景知識,試圖利用瀏覽器公開的標準信號,指出用戶更喜歡保存數據,而不是每個人都想出自己的啓發式。