2

キオスク経由で訪問者に表示される Web サイトがあります。人々はそれと対話することができます。ただし、Web サイトはローカルでホストされておらず、インターネット接続を使用しているため、ページの読み込みが遅くなります。

人々がページを閲覧するときなど、ある種の遅延キャッシュメカニズムを実装したいと思います-ページとページによって参照されるリソースがキャッシュされ、同じページの後続のロードが瞬時になります。

HTML5 オフライン キャッシュの使用を検討しましたが、マニフェスト ファイルですべてのリソースを指定する必要があり、Web サイトがかなり大きいため、これは実現できません。

これを実装する他の方法はありますか?おそらくHTTPキャッシングヘッダーを使用していますか?新しい変更をブラウザに「プッシュ」するために、ある時点でキャッシュを無効にする方法も必要です...

4

1 に答える 1

2

このような問題を処理するための通常のアプローチは、HTTP キャッシング ヘッダーを使用し、ページが参照するリソースの URL をスマートに構築することです。

一般的な考え方は次のとおりです。ページによって読み込まれるすべてのリソース (画像、スクリプト、CSS ファイルなど) には、バージョン管理された一意の URL が必要です。たとえば、 をロードする代わりにロード/images/button.pngして、/images/button_v123.pngそのファイルを変更すると、その URL が に変更され/images/button_v124.pngます。通常、これは、静的ファイル URL に対する URL 書き換えによって処理されます。たとえば、Web サーバーは、Web サーバーのファイル システムから/images/button_v124.png実際にファイルをロードする必要があることを認識します。/images/button.pngバージョン番号の作成は、ビルド番号の追加、ファイル コンテンツの CRC の使用、またはその他の多くの方法で行うことができます。

次に、親ページで URL が構築されている場合は、バージョン管理された URL を参照していることを確認する必要があります。これには明らかに、すべての URL を構築するために使用される動的コードが必要です。これは、ページの生成に使用されるコードを調整するか、すべてのtext/htmlリクエストに影響するサーバー全体のプラグインによって実現できます。

次に、Expiresすべてのリソース リクエスト (画像、スクリプト、CSS ファイルなど) のヘッダーを、かなり先の日付 (たとえば、今から 10 年後) に設定します。これにより、効果的に永久にキャッシュされます。これは、各ページによって読み込まれたすべてのリクエストが常にキャッシュからフェッチされることを意味します。キャッシュの無効化は発生しません。基礎となるリソースが変更されると、親ページは新しい URL を使用してそれを見つけるため、問題ありません。

最後に、「親」ページをキャッシュする方法を理解する必要があります。これをどのように行うかは、判断の呼びかけです。ETag/If-None-Match HTTP ヘッダーを使用して、ページの新しいバージョンを毎回確認することができます。これにより、サーバーが変更されていないことを報告した場合に、ページをキャッシュからすばやく読み込むことができます。または、Expires(および/またはMax-Age) を使用して、サーバーをチェックする前に、一定期間キャッシュから親ページをリロードすることもできます。

さらに高度なことをしたい場合は、いつでもカスタム プロキシ サーバーをキオスクに配置できます。その場合、キャッシュの実行方法を完全に集中管理できます。

于 2011-02-05T18:58:31.193 に答える