2016-11-19 2 views
0

Service Workerをいつ更新するかをユーザーに選択させることは可能ですか?ユーザーにサービスワーカーの更新を許可させる

なぜですか?エコノミーモードを追加したいと思っています。つまり、ユーザーは多くの帯域幅を節約することができます。これは、ユーザーの制限がほぼ満ちている場合や海外の高価なインターネットを使用している場合に便利です。

これは、Service Workerが更新され、新しいアセットのバージョンが存在する場合は、数MBになる可能性があるすべてのバージョンがダウンロードされるためです。新月から3日で50MB離れた場合、すべてのMBがカウントされます。


のは、私がのlocalStorageから設定を取得できることを言ってみましょう:

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

サービス労働者は経済が真であるならば、それはそれ自体のみを更新する必要があることを知っているようにどのように?


私は一種の彼/彼女は更新したくない場合、多くの場合、ユーザーを困らせるために長期(時代遅れのバージョン)が、イム計画の問題であることができることを実現しています。私は、ユーザーが選択できるオプションを追加したいだけです。

答えて

2

installactivateイベント以外のキャッシュエントリの更新/削除(場合によってはサブセットの一部)を処理する場合は、いつトリガする必要があるかについて柔軟性があります。実際には、サービスワーカーで更新を実行する必要はありません。個々のWebページには、特定の起源のサービスワーカーが使用しているものとまったく同じ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に滞在しているサービスワーカーに頼ることができますが、他のアクティブなクライアントが以前のキャッシュ状態に依存しているため、他のクライアントが必要とするエントリをスローすることやスワップアウトすることについて心配する必要はありませんそれがまだ使用されている間は新しいバージョンのリソースの期待バージョンです。しかし、開発者としては、最終的には、キャッシュされたリソースの使用方法を理解する責任があります。バージョンの不一致や、後で別のタブでネットワークから1つのタブを取得する必要があります。その場合、そのようなアプローチを自由に実装できます。

sw-precacheにキャッシュ/更新を実装する際に同様の問題が考えられます。ブラウザによって公開される標準的な信号を利用しようとすることについての背景については、ユーザが自分のヒューリスティックを使いこなすのではなく、データを保存することを好むことを示しているということについての背景がある(https://github.com/GoogleChrome/sw-precache/issues/145)。

関連する問題