2

HTML5 マニフェストを使用して、アプリケーションがオフラインで動作できるようにしています。/background.pngなどのリソースは時々更新される可能性がありますが、アプリケーションがオフラインの場合は、最後に取得したバージョンが使用に適しています。私が望む動作は、ブラウザーがオンラインの場合は通常/background.pngを要求することですが、オフラインである、サーバーがダウンしているなどの理由で要求が失敗した場合は、キャッシュされたバージョンにフォールバックします。

私のテストでは、次のようなマニフェストエントリがあります

NETWORK:
/background.png

ブラウザが常にリソースをリクエストしようとするようにしました。オフラインの場合、appcache からコピーを返すのではなく、エラーを返します。それは私が望んでいることではありませんが、私が理解しているように NETWORK がどのように振る舞うべきかということです。

私も試しました

FALLBACK:
/background.png /background.png

「新しいものを取得できない場合はキャッシュコピーにフォールバックする」ことを意味するかもしれませんが、その構成では、ブラウザーはオンラインの場合、リソースを要求しようとしません。

私が考えたもう一つの可能​​性は

CACHE:
/offline-background.png

FALLBACK:
/background.png /offline-background.png

しかし、同じリソースに 2 つの異なる名前を付け、同じリソースを 2 回 ( img src="background.png"に対して 1 回、キャッシュされたオフライン コピーに対して 1 回) 要求することは、見栄えの悪いハックのように思えました。

また、 background.pngが変更されたときにマニフェストに任意の変更を加えることもできますが、それによってブラウザがマニフェスト内のすべてをチェックすることになります。

HTML5マニフェストからこの「新しいものを入手できない限り、私が持っているものを使用する」パターンを取得することは可能ですか? これは合理的なパターンのように思えるので、きれいな方法があると思います。そうでない場合、誰かが別のアプローチを提案できますか? 前もって感謝します!

編集: 元の質問は「news.json」を参照しており、リソースが JavaScript によって取得されていたことを暗示していますが、「background.png」に変更して、任意のリソースでこれを実行したいことを明確にしました。ページによって使用されます。

4

1 に答える 1

0

キャッシュを自分で管理する最善の方法は、キャッシュをローカル ストレージに貼り付けることです。JSON をニュース フィードから 1 つの変数に直接ドロップするだけでよいはずです。ファイルを要求する/news.jsonと、応答時にキャッシュされたコピーのみが更新され200、アプリの残りの部分では常にローカル ストレージのコピーが使用されます。

于 2012-01-18T13:51:17.090 に答える