HTTPキャッシュ
Diffこの記事は BOOK から派生したものであり、既存の公式ドキュメントとは異なります。この記事では、いくつかの場所でさらに詳しく説明します。したがって、公式との同期を強制することはありませんでした。
リッチ Web アプリケーションの本来の特性は、動的であることです。プログラムがどれほど効率的であっても、各リクエストには常に静的ファイルよりもはるかに大きなオーバーヘッドがかかります。
そして、多くの Web プログラムは大きな影響を受けていません。 symfony は非常に高速で、非常に負荷の高い作業を行っている場合を除き、サーバーに過度のストレスをかけることなく、すべてのリクエストがすぐに復元されます。
しかし、サイトは成長しており、過負荷が問題になる可能性があります。一般的なリクエストの処理は 1 回だけ行う必要があります。そして、それがまさにキャッシュ ロックの目的です。
巨人の肩に乗ったキャッシュ ¶
プログラムのパフォーマンスを向上させる最も効果的な方法は、ページの出力全体をキャッシュし、出力全体を無視することです。その後のリクエスト。もちろん、非常に動的な Web サイトの場合、これが常に当てはまるとは限りません。この章では、Symfony のキャッシュ システムがどのように機能するのか、そしてそれが最適なソリューションである理由を学びます。
Symfony キャッシュ システムは、HTTP 仕様 で定義された HTTP キャッシュのシンプルさと強力に依存しているため、これとは異なります。 Symfony はキャッシュ手法を再発明するのではなく、Web 上の基本的な通信を定義する標準を重視しています。 「HTTP 検証」と「キャッシュされたモデルの有効期限」の基本をマスターすれば、すでに Symfony のキャッシュ システムをマスターできます。
Symfony キャッシュを学習するプロセスは 4 つのステップに分けることができます:
ゲートウェイ キャッシュ (ゲートウェイ キャッシュ) またはリバース プロキシ (リバース プロキシ) )、これはプログラムの前にある別のレイヤーです。リバース プロキシは、プログラムから返される応答をキャッシュします。また、リクエストがプログラムに到達する前に、キャッシュされた応答でリクエストに応答することもできます。 symfony は独自のリバース プロキシを提供しますが、任意のリバース プロキシが機能します。
HTTP キャッシュHTTP キャッシュ ヘッダーは、プログラムとクライアントの間でゲートウェイ キャッシュまたは他のキャッシュと通信するために使用されます。 Symfony は、キャッシュヘッダーと対話するための合理的なデフォルト設定と強力なインターフェイスを提供します。
HTTP有効期限と検証 (有効期限と検証)、これら 2 つのモデルは、キャッシュされたコンテンツが fresh/fresh(キャッシュから再利用可能)、または stale/stale (プログラムによって再生成される必要がある)
エッジ サイド インクルード (ESI) 、エッジサイドに含めることで、HTTP キャッシュをページの一部 (ネストされたフラグメントも) の独立したキャッシュに使用できるようになります。 ESI を利用すると、「ページ全体を 60 分間キャッシュし、サイドバーを 5 分間だけキャッシュする」こともできます。
HTTP キャッシュは Symfony に限定されたものではないため、関連記事が多数あります。 HTTP キャッシュに詳しくない場合は、Ryan Tomayko 著の Things Caches Do を読むことを強くお勧めします。もう 1 つの優れた詳細記事は、Mark Nottingham の キャッシュ チュートリアル です。
ゲートウェイ キャッシュの使用 ¶
HTTP キャッシュを使用する場合、cache はプログラムから完全に分離され、プログラムとリクエストを開始するサーバーの間に存在します。 .クライアント間で。
キャッシュのタスクは、クライアントのリクエストを受信し、それをプログラムに渡し、さらにクライアントにプッシュすることです。ここでのキャッシュは、プログラムとブラウザ間の「リクエストとレスポンス」通信プロセスにおける「仲介者」です。
時間が経つと、これらのキャッシュには「キャッシュ可能」とみなされるすべての応答が保存されます (HTTP キャッシュの概要 を参照)。同じリソースが再度リクエストされた場合、キャッシュはアプリケーションを完全に無視して、キャッシュされた応答をクライアントに送信します。
このタイプのキャッシュは HTTP ゲートウェイ キャッシュで、Varnish、Squid、エージェント間の Symfony のリバース プロキシ モードなどのプログラムに存在します。
キャッシュ タイプ ¶
ただし、ゲートウェイ キャッシュが唯一のキャッシュ タイプではありません。実際、プログラムによって送信された HTTP キャッシュ ヘッダーは、最大 3 つのキャッシュ方法によって解釈されると想定されています。
ブラウザ キャッシュ : 各ブラウザには独自のキャッシュがあります。ローカル キャッシュが組み込まれており、「戻る」をクリックしたとき、または画像やその他のアセットに使用されます。キャッシュされたリソースは他のユーザーが使用できないため、ブラウザー キャッシュはプライベート (プライベート) キャッシュです;
プロキシ キャッシュ : プロキシが参照します多くの人が 1 人をフォロー (使用) できるため、共有 (shared) キャッシュに保存されます。通常、アクセス遅延とネットワーク トラフィックを削減するために、大企業または ISP によって使用されます。
ゲートウェイ キャッシュ: プロキシと同様に、これも共有キャッシュですが、サーバー側にあります。 Web サイトのアップグレードを容易にし、信頼性とパフォーマンスを向上させるために、ネットワーク管理者によってよく使用されます。
private ) キャッシュと共有 (shared) キャッシュの重要性は日に日に増しています。
プログラムのすべての応答は、最初の 2 つのキャッシュ タイプの一方または両方を経験します。これらのキャッシュは (プログラムの) 制御の範囲外ですが、応答に設定された HTTP キャッシュ命令に従います。
Symfony リバース プロキシ ¶
Symfony には、PHP で書かれたリバース プロキシ (ゲートウェイ キャッシュとも呼ばれます) が組み込まれています。 これは、Varnish のようなフル機能のリバース プロキシ キャッシュではありませんが、良いスタートとしては最適です。
Varnish のセットアップの詳細については、「 Varnish を使用して Web サイトを高速化する方法」を参照してください。
AppKernel) パックします。このキャッシュ コア
はリバース プロキシです。 キャッシュをオンにするのは簡単です。フロント コントローラーのコードを変更するだけです。 app_dev.php に次の変更を加えて、
環境のキャッシュを追加することもできます。
上記のキャッシュ コアは、すぐにリバース A プロキシとして機能します。アプリケーションからの応答をキャッシュし、クライアントに返すことによって機能します。 // web/app.phpuse Symfony\Component\HttpFoundation\Request;
// ...$kernel = new AppKernel('prod', false);$kernel->loadClassCache();
// add (or uncomment) this new line! / 添加下面新行!
// wrap the default AppKernel with the AppCache one
// 用AppCache打包默认的AppKernel$kernel = new AppCache($kernel); $request = Request::createFromGlobals(); $response = $kernel->handle($request);$response->send(); $kernel->terminate($request, $response);
1
# |
Cache-Control: max-age=600, s-maxage=600 | 有効期限と検証 (有効期限と検証) ¶もちろん、同じ 注釈を使用して有効期限と検証用の HTTP キャッシュ ヘッダーを定義することもできます。 FrameworkExtraBundle ドキュメントを参照してください。 ¶Response // Marks the Response stale 标记响应过期$response->expire(); // Force the response to return a proper 304 response with no content // 强制响应返回一个没有内容的恰当的304响应$response->setNotModified();さらに、ほとんどのキャッシュ関連の HTTP ヘッダーは、
// Set cache settings in one call$response->setCache(array( 'etag' => $etag, 'last_modified' => $date, 'max_age' => 10, 's_maxage' => 10, 'public' => true, // 'private' => true, ));概要 Symfony の設計思想は、業界で認められた標準である HTTP に従うことです。キャッシュ機能も例外ではありません。 Symfony のキャッシュ システムをマスターするということは、HTTP キャッシュ モデルに精通し、それを効率的に使用できることを意味します。言い換えれば、Symfony のドキュメントやルーチンに依存せずに、Varnish に代表される HTTP キャッシュとゲートウェイ キャッシュの世界を探索できます。 |