0

PHPでページを動的に生成しています。サイトの出力文字列を使用して Etag を生成し、前回の要求以降サイトが変更されていない場合に 304 (変更されていない) を送信することを確認しています。

私は今、自分のサイトの写真のキャッシュも改善しようとしています. 各サイトには 6 ~ 30 枚の写真 (jpg、70 ~ 200 KB) があります。内容が変更された場合、ユーザーに画像をリロードしてもらいたい。各画像の URL にクエリ文字列を追加して、これを行うことを考えています。

src="'.$files[$x].'?id='.md5_file($files[$x]).'"

これは複雑すぎて、各リクエストで大量のワークロードが生成されますか?それとも価値がありますか? 私が言ったように、私は各画像に対してこれらのmd5ハッシュを生成し、次に出力文字列に対して1つのmd5ハッシュを生成して、各リクエストでEtagとして使用します。

これらは私のイメージからの応答ヘッダーです:

HTTP/1.1 304 Not Modified
Date: Mon, 10 Dec 2012 08:56:49 GMT
Server: Apache
Connection: keep-alive, Keep-Alive
Keep-Alive: timeout=1, max=99
ETag: "360f-4d02f5fcfc34f"
Expires: Mon, 07 Jan 2013 08:56:49 GMT
Cache-Control: max-age=2419200, must-revalidate

どうもありがとうございました!

4

1 に答える 1

1

時間ベースのキャッシュヘッダーを使用するということは、ファイルがしばらくの間更新されたかどうかをクライアントがサーバーにまったく尋ねないことを意味します。
Etagキャッシングヘッダーを使用すると、クライアントは毎回サーバーに問い合わせますが、データを毎回転送する必要はありません。

どちらの方法にも長所と短所があります。めったに変更されないアセットの場合、サーバーから多くの負荷がかかるため、時間ベースのキャッシュヘッダーを使用する必要があります。更新されてもすぐに更新できるようにするには、URLに一意のトークンを追加することをお勧めします。頻繁に更新されるアセットの場合、時間ベースのキャッシュヘッダー(または非常に短命のヘッダー)なしでEtagを使用することをお勧めします。これは、サーバーの負荷を軽減しながら、更新するとすぐに更新されることを意味します。通常、動的Webページにタグを付け、画像アセットをタイムキャッシュします。

したがって、クライアントに更新されたバージョンをできるだけ早くダウンロードさせることが実際の懸念事項である場合は、静的な時間キャッシュアセットのURLにmd5ハッシュを追加することをお勧めします。ただし、これらのハッシュを追加することで、節約するよりもオーバーヘッドが大きくならないようにしてください。

于 2012-12-10T09:23:01.967 に答える