1

私は現在、Webアプリを開発しています。これには、サーバーで動的に生成された (したがって、要求されてから表示されるまでに時間がかかる) 画像が含まれています。そこでHTML5 local-storage、API を使用して画像をキャッシュし、同じ画像に対する後続のリクエストで即座に提供できるようにしようと考えました。そのため、ソース URL を使用する代わりに、画像の base64 エンコーディングをソースとして使用する予定です。

サーバーから画像を要求する代わりに、 はJS最初にその画像データがローカル ストレージで現在利用可能かどうかを確認します (たとえば、属性123を持つ画像がローカル ストレージに保存され、キーとして123、値として base 64 エンコーディングが使用されているとします)。 )。はいの場合は、そこから取得した値で画像のソースを変更するだけです。それ以外の場合は、サーバーにエンコーディングを送信するように要求し、エンコーディングを受信すると、キャッシュに保存されます。

問題はそれをサポートしIE6IE7いないことです。こちらで説明されているように回避策がありますが、それには画像データを含むサーバー側の CSS ファイルが必要です。画像はオンザフライで生成されるため、これでは目的を達成できません。IE6とでこれを達成するにはどうすればよいIE7ですか?

4

2 に答える 2

1

リソースがキャッシュされていることをブラウザーに通知するヘッダーを設定します。

header("Last-Modified: " . date("D, d M Y H:i:s", getlastmod()));

PHPまたは

Response.Cache.SetLastModified(DateTime.Now);

.netで

このようにして、ブラウザはリソースをキャッシュします。

于 2013-02-13T18:26:09.450 に答える
1

または、クライアント側で何かをキャッシュしようとしないでください。生成された画像をサーバー側にキャッシュし、それらの画像を通常どおりホストします。localstorage は必要なく、クライアント側でキャッシュします。

言い換えると:

  1. スクリプトを使用して画像サーバー側を生成します
  2. 次のような場所にキャッシュします/httpdocs/cache/images/whatever-hash.jpg
  3. ドキュメントに画像を提供する<img src="/cache/images/whatever-hash.jpg">

イメージの生成に 5 秒かかり、120 人の同時ユーザーが 100 個の一意のページを要求していて、サーバー スクリプトが常に 4 つのスレッドの処理しか処理できない場合、5 秒 x (120 /4) / 60 = サーバーの2.5 分になります。キューのイメージ内の最後のユーザーが処理され、データが localstorage に保存されるまでの処理時間。

すべてのユーザーがまったく同じページを要求した場合、費やされた時間は同じになります。すべてのユーザーはサーバーに独自のイメージを生成するように要求する必要があるため、ユーザーごとにキャッシュしても実際のメリットはありません。また、localstorage は頻繁に無効化されるため、ユーザーが操作を行うほど、ユーザー エクスペリエンスがかなり遅くなり、私の意見では、あなたのアプリは保釈されます。

サーバー上のファイルをキャッシュすると、IMHO にはさらに多くの利点があります。確かにサーバーのストレージ スペースを占有しますが、最近ではかなり安価であり、負荷に対処するためにクラウド CDN (例: www.maxcdn.com) を取得できます。

それでもクライアント側をキャッシュする必要があると判断した場合は、IE6/IE7 が localstorage または data URI をサポートしていないため、以下を確認してください。

于 2013-02-13T17:12:06.050 に答える