私たちのコミュニティの他のメンバーがすでに言っているように、キャッシングは非常に重要なツールです。もちろん、サーバーの負荷と待ち時間を減らしたい場合))過去 2- 3週間:
まずLast-Modified
、リクエストに応答して http ヘッダーを返すように実装できますIf-Modified-Since
(またETag/If-None-Match
、唯一の違いは、Last-Modified が日付を表すときに、Etag が何らかのハッシュ値を表すことです)。If-Modified-Since
日付を比較するだけでLast-Modified
、ページや画像などが古くなっている場合は200 OK
ステータスコードで返します。304 Not Modified
画像が変更されていない場合は、ステータスのみを返します(画像はブラウザーのキャッシュから提供されます)。
この場合、クライアント (ブラウザ) に画像をキャッシュする必要があります。
たとえば、データベースクエリの数を減らしたい場合は、それらをサーバーにキャッシュすることもできます。または両方を使用できます: ServerAndClient.
2 つ目:過去 2 週間、私はこのアプローチに苦労していました)応答ヘッダーを永遠 (たとえば 1 年)
に設定し、クライアントに画像をキャッシュします。Expires
画像が変更された場合は、新しい URL (ハッシュされた画像の最終書き込み日を含む) を作成します。
画像フォルダーを監視する Windows サービスを作成しました。画像が変更された場合、最終変更日がデータベースに書き込まれます。この画像の最終更新日を URL に追加します。
このアプローチの利点は、イメージが変更された場合にのみサーバーがヒットすることです。
たとえば、最初に説明したアプローチでは、ブラウザはサーバーにリクエストを送信して、独自のキャッシュから画像を取得する前に画像が最新かどうかを確認する必要があります。
3 番目のこと:Expires
http ヘッダーを単独で (Last-Modified
またはを実装せずに)使用しないでくださいEtag
。たとえば、クライアントに画像をキャッシュすると、期限が切れない限り、ブラウザーはキャッシュからこの画像を取得します。そのため、画像が変更された場合、期限が切れない限り、ユーザーには表示されません。
キャッシングに関する私の小さな経験があなたに役立つことを願っています:)
PSは可能な限りすべてをキャッシュします!