22

アプリケーションで使用されるフォルダーに多くの画像があります。キャッシュ マニフェストを使用する場合、ワイルド カードを指定して特定のディレクトリ内のすべての画像またはファイルをキャッシュに読み込むことができれば、メンテナンスが容易になります。

例えば

CACHE MANIFEST
# 2011-11-3-v0.1.8
#--------------------------------
# Pages
#--------------------------------
../index.html
../edit.html
#--------------------------------
# JavaScript
#--------------------------------
../js/jquery.js
../js/main.js
#--------------------------------
# Images
#--------------------------------
../img/*.png

これはできますか?いくつかのブラウザでも試してみました../img/*が、うまくいかないようです。

4

5 に答える 5

22

簡単にできますが、どのように機能しますか?マニフェスト ファイルは、ブラウザーで解析および処理されるものであり、サーバー上のファイルについて、ユーザーが指定したもの以外には特別な知識はありません。ブラウザにこれが表示された場合:

../img/*.png

ブラウザがサーバーに要求する最初の画像は何ですか? これらから始めましょう:

../img/1.png
../img/2.png
../img/3.png
../img/4.png
...
../img/2147483647.png

これが数値名で存在する可能性のあるすべての画像で、半恣意的に2 31 -1で停止します。この 20 億個のファイルのうち、あなたのimgディレクトリにはいくつのファイルが存在するでしょうか? 20 億の 404 を取得するためだけにこれらすべてのリクエストを行うブラウザが本当に必要ですか? 完全を期すために、ブラウザはおそらくゼロで埋められた同等のものをすべて要求したいと思うでしょう:

../img/01.png
../img/02.png
../img/03.png
../img/04.png
...
../img/001.png
../img/002.png
../img/003.png
../img/004.png
...
../img/0001.png
../img/0002.png
../img/0003.png
../img/0004.png
...

現在、ブラウザは、ほとんど存在しないファイルに対して 40 億回以上の HTTP リクエストを作成しており、サーバー上に存在する可能性のあるファイル名を作成する際に、文字や句読点さえまだ取得していません。これは、マニフェスト ファイルが機能するための実行可能な方法ではありません。サーバーは、imgディレクトリ内のファイルが認識される場所であるため、ファイルのリストを構築する必要があるのはサーバー上です。

于 2011-11-04T12:29:13.193 に答える
17

そのようには機能しないと思います。すべての画像を 1 つずつ指定するか、単純な PHP スクリプトを使用してディレクトリをループし、ファイルを出力する必要があります (text/cache-manifestもちろん、正しいヘッダーを使用して)。

于 2011-11-03T20:31:51.483 に答える
3

ブラウザがフォルダの一覧を要求できるようになれば、セキュリティ上の大きな問題になります。そのため、Tomcat はデフォルトでその機能をオフにしています。

ただし、ブラウザーは、キャッシュするページによって参照されるワイルドカードに一致するものをすべて見つけることができます。このアプローチにはまだ問題があります (たとえば、最初は使用されず、JavaScript などによって動的に設定された画像についてはどうでしょうか。また、キャッシュされたすべてのアイテムをダウンロードするだけでなく、解析する必要があります)。

于 2012-05-15T17:02:09.777 に答える
2

手動で行うのではなく、このプロセスを自動化しようとしている場合。スクリプトを使用するか、私と同じようにmanifestRを使用します。マニフェスト/appcacheファイルが出力され、コピーして貼り付けるだけです。私はそれをうまく使用し、通常はいくつかの変更を加えるだけで済みます。

また、ワイルドカードでネットワークヘッダーを使用することをお勧めします。

NETWORK:
*

これにより、たとえば、JSONを介して他のリンクされたドメインからのすべてのアセットをキャッシュにダウンロードできます。ワイルドカードを指定できるヘッダーはこれだけだと思います。他の人がここで言ったように、それはセキュリティ上の理由からです。

于 2012-11-09T18:53:34.917 に答える