クライアント側のブロックキャッシング

最近、負荷の高いサイトでは、部分キャッシングまたはブロックキャッシング技術がますます使用されています。 原則として、これは一見長い間忘れられていたSSIまたはそれに近い技術(たとえばESI )を使用することで実現されます。 たとえば、バンドルでは、Nginx + Memcached + SSIまたはVarnish + ESI。

最近、Habréにもトピックが登場し、著者がこのキャッシュ方法を説明しました。

ソリューションの第3バージョンのこのトピックでは、著者はトピックの読者を招待して、この問題に対する独自のソリューションを提供しました。

実際、このトピックはこのトピック専用です。

問題の声明


ほとんどの場合、Webページはブロックで構成されています。 たとえば、単純なページの場合、これらはブロックです。ヘッダー、フッター、右または左のブロック、メインコンテンツのブロックです。 サイトがより複雑な場合、それに応じて、たとえば、Habrの場合、これらのブロックはより多くなります。これらは「最後の投稿」、「最後のコメント」、「類似の投稿」などのブロックです。 したがって、プレゼンテーションレベルでページをキャッシュする場合、つまり 直接生成されたhtml このページに配置されたブロックのいずれかが変更された場合、そのようなページのキャッシュを無効にする必要があります。
そのため、ほとんどの場合、キャッシュはモデルまたはデータレベルで適用され、特定のページテンプレートに入力されます。

ここでSSIが助けになります。このテクノロジーのおかげで、実際にページをこれらの同じ論理ブロックに分割し、各ブロックを個別にキャッシュします。

SSI挿入を使用したページの例:
 <html> <body> <div class="header"> <!--# include virtual="/header.php" --> </div> <div class="main_content"> <!--# include virtual="/main.php" --> </div> <!--# include virtual="/footer.php" --> </body> </html> 
<html> <body> <div class="header"> <!--# include virtual="/header.php" --> </div> <div class="main_content"> <!--# include virtual="/main.php" --> </div> <!--# include virtual="/footer.php" --> </body> </html>

ここでは、すべてがうまくいくように思われますが、いくつか残しておきたいことがあります。

問題




何が提供されていますか?


また、次のキャッシュメカニズムが提案されています。

まとめ




一部の検索エンジンのクローラーはJavaScriptを処理しないため、このキャッシュ方法の欠点にはインデックス作成の問題が含まれます

アプローチと提案に関するあなたの意見を聞くのは興味深いでしょう。

リンクのリスト


Source: https://habr.com/ru/post/J96022/


All Articles