2017-04-23 3 views
0

アプリを完全にオフラインで使用可能にしたいと考えています。つまり、オンラインやすべての動的ページを含むすべてのページ、およびサイト上のアセットをキャッシュすることができるように、ユーザーがボタンをクリックする(またはそうでないと自動的に行われる)すべてのサイトページでsw-precacheを初期化する方法

私はすべてのアセットのリストを生成する必要がありますか、これを行うためのツールがあるのか​​、sw-precacheに組み込まれているのでしょうか?

キャッシュはどれくらいの大きさで、どれくらいの期間利用できるのですか?ユーザーがブラウザキャッシュを明確にクリアしない限り、サイズやサイズは問わないものとします。

答えて

0

スタティックファイル(HTML、JS、CSSなど)でいっぱいのローカルディレクトリがある場合は、渡したパターンに基づいて、自動的にそのすべて(または一部のサブセット)をプリキャッシュするようにsw-precacheを設定できますstaticFileGlobs option。ユーザーのブラウザで以前に事前定義されたエントリは、ローカル変更を行い、service-worker.jsを再生成して再デプロイする際に最新の状態に保たれます。

一般に、キャッシュストレージAPIを使用して保存できるデータの最大量には厳しい上限はありません。現在空いている容量(潜在的に他のヒューリスティックと一緒に)に依存します。

どのファイルが予備になっているかを判断し、実際にユーザーが役に立つと思うファイルであることを確認するときには、考慮する必要があります。たとえば、初めて(仮説的な)ドキュメンテーションサイトを訪問すると、数千ものHTMLドキュメントがダウンロードされて格納されてしまいます。これは、サーバーとユーザーの両方の帯域幅を浪費します。ユーザーのデバイス。

大量のリソースがすべての訪問者に必要なものではない場合は、重要なリソースに予備的な戦略を使用し、オプションのリソースの場合はruntime caching strategyを使用するのが最善の策です。ランタイムキャッシュ方式と最大キャッシュサイズまたは最大経過時間を組み合わせることができます。また、下にあるsw-toolboxライブラリが古いエントリを削除します。

+0

ありがとうございます。これはストレージの制限に対応しています。私はすべてのコンテンツをキャッシュするランタイムキャッシュ設定を持っています。基本的には、動的に生成されたもの(私の質問を更新したもの)を含め、すべてのページをユーザーがキャッシュできるようにしたいと思います。私がこれを行う唯一の方法は、すべてのページを訪問してキャッシュを初期化することです。これを行うための方法はありません(動的変更に再デプロイする必要はありません)。 – riley

+0

可能なURLを事前に知っている場合は、事前に動的ページを事前にキャッシュすることができ、https://github.com/GoogleChrome/sw-precache#dynamicurlododepepencies-objectstringarraystringオプションを使用することができます。あなたは "ボタンをクリックするだけで"言及しているので、それはあなたが誇張するのではなく、キャッシュオンデマンドにしたいことを私にしてくれます。要求に応じてキャッシュにデータを入れ、 'window.caches'を使ってページからデータを取り出し、適切な更新戦略(' fastest'など)を使ってキャッシュされた応答を提供するために 'runtimeCaching'経由でルートを設定します。 –

関連する問題