2011-10-20 7 views
8

すべてのURLを1つのキャッシュマニフェストにリンクできます。しかし、同じURLにリンクされた複数のキャッシュマニフェストが必要です。理由は次のとおりです。HTML5キャッシュ - 1つのURLに複数の異なるキャッシュを持つことは可能ですか?

キャッシュされたいファイルはほとんど更新されず、大きくなりません。 キャッシュが更新されるたびに、これらの大きなファイルは変更されていなくても再ダウンロードされます。 キャッシュを分割したいと思います。ほとんどの場合、更新された大容量ファイル用に1つのキャッシュと、頻繁に更新される軽量ファイル用に別のキャッシュがあります。

HTML5キャッシュを分割する方法はありますか?

答えて

9

最も効率的な方法は次のとおりです。

a)のマニフェストのCACHEセクションで説明されているすべてのリソースに遠未来の有効期限(最大エージング)を使用し、CACHEセクションで、例えば、各ファイルにタイムスタンプの接尾辞を追加します。

 
CACHE: 
menu_1355817388000.js 
toolbar_1355817389100.js 

上記のファイルのいずれかがサーバー上で変更b)は、タイムスタンプを変更するマニフェストREGEN /更新。次回は、変更されたタイムスタンプのファイルのみがダウンロードされます。任務完了。

注:最初のリフレッシュブラウザがマニフェストをダウンロードし、古いキャッシュされたリソースを使用してページをペイントするのと同じように、ブラウザでページを2回リロードします。これは、ページの表示をスピードアップするために行われます(ダブルリフレッシュのこの問題に対処する秘訣がありますが、問題の範囲外です)。

詳細はthis long but best article I ever seen on appcacheを参照してください。

+0

恐ろしい参考記事です。私にもっと深い洞察力を与えました。 +1は、これを読んだ皆さんにお勧めします。 – Kiruse

+0

タイムスタンプをプログラムで変更するためにマニフェストを再生/更新する方法はありますか? –

+0

@KimHonoridezあなたが何を意味するか分からない。標準的な手順は、マニフェスト内のコメント内のバージョンを変更することです。 –

-1
CACHE MANIFEST 

# This is a comment. 
# Cache manifest version 0.0.1 
# If you change the version number in this comment, 
# the cache manifest is no longer byte-for-byte 
# identical. 

demoimages/mypic.jpg 
demoimages/yourpic.jpg 
demoimages/ourpic.jpg 
sr/scroll.js 

NETWORK: 
# All URLs that start with the following lines 
# are whitelisted. 
# whitelisted items are needed to help the site function, you could put regularly 
# changing items here 
http://example.com/examplepath/ 
http://www.example.org/otherexamplepath/ 

CACHE: 
# Additional items to cache. 
demoimages/allpics.jpg 

FALLBACK: 
demoimages/currentImg.jpg images/stockImage.jpg` 
+1

また、私はあなたのソリューションでキャッシュされないであろう、定期的に変更する項目をキャッシュしたいです。おかげで – brillout

2

のiframeを使用し

大きなファイル

Chromeで

のiframeのアプリケーションキャッシュは、意志が含まれるであろう光のファイルと、このページでロードされたIFRAMEのキャッシュマニフェストが含まれるであろう

あなたのページのキャッシュマニフェストページにも使用できます。私はこの方法を他のブラウザではまだテストしていませんでした。

http://www.timer-tab.comでのライブの例を参照して、クロムを使用している場合は、クロムでその分割キャッシュを参照してください。インラインフレームのトリックは動作しない場合は、HTML5ファイルシステムAPIを使用して// appcache-内部/

2

を参照してください。つまり、これらの大きなファイルに対して正しいHTTPキャッシュヘッダーを設定すると、304が表示され、これらのファイルは再びダウンロードされません。したがって、アプリケーションキャッシュを分割する必要はありません。

1

答えかもしれませんが、自分のウェブアプリケーションのトラブルシューティングとして、私の所見にいくつかの光を当てたいと思います。

私は2つのiframe(manifest_framework)と(manifest_media)を使用してマニフェストを読み込むことができることを発見しましたが、私はまだターゲットの仕組みがはっきりしていませんが、

manifest_framework:

CACHE MANIFEST 

CACHE: 
appdata.ini 
dialog.png 
jquery.min.js 
login.htm 
login.js 
manifest.appcache.js 

NETWORK: 
* 

FALLBACK: 

manifest_media:

CACHE MANIFEST 

CACHE: 
manifest_fwk.php 
od/audio_track_1_1.m4a 
od/audio_track_1_2.m4a 
od/audio_track_1_3.m4a 
od/audio_track_1_4.m4a 
od/video_1.mp4 
od/video_2.mp4 
od/video_3.mp4 

NETWORK: 
* 

FALLBACK: 
./ webapp.php 

./index.phpは、ページ自体がキャッシュされていない 'ランディングページ' ですが、オフライン時webapp.phpにフォールバック。

私が理解できないのは、これらがwebapp.phpページにどのようにリンクしているかです。 私は、1つまたは他のマニフェストキャッシュにしかアクセスできないことを発見しました。 上記はモバイルサファリで動作し、メディアはキャッシュされ、画像ではありませんが、必ずしもフレームワークマニフェストのJSまたはイメージではありません。

誰かが、1つのURL /ページから複数のマニフェストを参照する例がありますか?

0

W3Cワーキンググループはファイルシステムapiを放棄したので、もう使用しないでください。

次のバージョンのChromeが公開される可能性があります。オフライン機能の

http://www.w3.org/TR/file-system-api/

関連する問題