11

updatereadyイベント ハンドラーを実装せずswapCache()、 を呼び出さない場合、ブラウザーは常にアプリケーションの最初 (最も古い) ダウンロードされたバージョンを使用することになりますか?

いいえの場合、なぜそのswapCache()方法が必要なのですか?

4

6 に答える 6

12

Swapcache は、キャッシュされたリソースへの「後続の」呼び出しが新しいキャッシュから取得されるようにします。swapcache の後の後続の意味。これを実際に確認するには、updateready イベントで swapcache を呼び出した後に img の src プロパティを動的に設定してみてください (ブラウザが特定の時間にロードするようにします)。この画像がページの他の場所にまだロードされていないことを確認してください。これにより、このテストが歪められます。ここで、イメージを変更し、マニフェスト ファイルを変更します (キャッシュされたファイルを強制的に再読み込みするため)。ブラウザでページをリロードします。レンダリングされたページに新しいバージョンの画像が表示されるはずです。ここで、swapcache への呼び出しをコメント アウトします。マニフェスト ファイルに変更を加え、ページとすべてのリソースをリロードします。ページを再度更新します (新しいキャッシュからのバージョンがあることを確認するため)。イメージを再度変更し、マニフェストを変更します。ページを再度リロードします。古いバージョンの画像が表示されます。最後のケースでは、ブラウザーは新しいバージョンのキャッシュへの読み込みを完了しましたが、swapcache が呼び出されなかったため、画像はまだ古いキャッシュから取得されていました。

ページでリソースの動的ロードを行わない場合、swapcache は効果がありません。

特に、updateready イベント ハンドラーでページをリロードする場合、最初に swapcache を呼び出しても効果はありません。ページをリロードすると新しいキャッシュからページが取得されるためです。

于 2011-09-12T13:30:47.540 に答える
7

かなり大きなキャッシュ(> 100mb)を備えたアプリがあります。これは、キャッシュをスワップインするのに特に長い時間がかかります(そして、これが起こっている間、ブラウザをほとんどロックします)。そこで、アプリが更新中であることを示すメッセージを表示し(しばらくお待ちください...)、電話をかけswapCache()て、完了したら新しいメッセージを表示して完了を示します。

これがあなたの質問に答えるかどうかはわかりませんが(なぜそれが必然的に必要swapCache()のかについて)、少なくとも有効なユースケースを提供すると思います。

于 2010-09-16T20:11:05.933 に答える
3

SwapCache メソッドは、アプリケーションが更新の適用方法を制御するメカニズムを提供します。通常の HTML アプリでは、クライアントのブラウザーに正しい JS が存在するかどうかを判断するのが難しい場合があります。また、ブラウザの実装は、キャッシュが更新されるタイミングによって異なります。iPhone は特に頑固であることがわかりました。swapCache により、アプリの更新方法を制御できるようになりました。つまり、パッチを自動的に適用するか、ユーザーがいつ適用するかを選択できるようにすることができます。

于 2010-01-15T20:33:09.433 に答える
2

私は同じことを疑問に思っていました。「window.applicationCache.update()」を呼び出すだけで、更新を成功させることができるようです。マニフェスト ファイルが変更されている場合、「ダウンロード」イベントがトリガーされ、最終的に「更新準備完了」になります。

再読み込みすると、適用されたように見えます。swapCache() を呼び出す必要はないようです。アプリから呼び出す準備はできていますが、これまでのところ更新プロセスへの影響はありません。

update() を呼び出すと、基本的に AFAICS という 1 つのリロードが不要になります。

于 2010-07-04T09:17:40.420 に答える
0

swapCacheキャッシュ マニフェストにリストされているリソースの以前のセット (実行中の webapp が読み込まれたとき) から新しいセットに切り替わります。updatereadyこれは、新しいマニフェストが読み込まれたことを通知するに応答して実行しています。

これは、通常のブラウザー キャッシュ ポリシーが適用される個々のリソースの読み込みと混同しないでください。つまり、一連のリソースを交換しますが、個々のリソースには、必要なときに再読み込みされるようにするための独自のキャッシュ管理が必要です。

私はまだこれを試していませんが、更新プロセスを処理する「更新コントローラー」JavaScript ファイルとしてコードを構造化し、既知のエントリ ポイントを持つバージョン管理されたファイル名 (または URL) を持つ JavaScript ソースを提案するようです。

于 2011-08-23T16:08:44.577 に答える