2011-02-23 3 views
2

問題: 私は50k +ページを持つウェブサイトを持っており、そのほとんどは作成時にのみ更新されます。コンテンツに頻繁な変更を必要としないので、これらのページのキャッシュを構築しています。しかし、私はいくつかのことについて混乱しています。PHPのページの特定の部分をインテリジェントにキャッシュする方法は?

  • 私はページ全体をキャッシュした場合、どのように私はこれが一番であるとしてメインキャッシュはページの途中で行われているように、私は、ページのメタタグをキャッシュするにはどうすればよいのサイドバー
  • にユーザログイン/ログアウトの状態を保存しません高価な部分は遠くの処理に関係する。

答えて

0

ページの残りの部分をキャッシュする場合は、最初に、AJAX経由でログインステータスサイドバーを読み込むことができます。 AJAXリクエストの結果は分離されているので(おそらく、キャッシュされていないと思われます)、正しく更新されます。

あなたが実際にページコンテンツの一部としてメタタグを送信していると仮定すると、すべての処理が完了するまで実際に出力ストリームに何かを書き込むことができるので、自由に計算できますたとえそれらが実際のページのHTMLコンテンツの早期または後に来るとしても、任意の順序でのものです。

0

明らかに私はあなたのセットアップに関する特定の情報はありませんが、一般的な方法は単にデータベース結果/ページ固有のコンテンツをMemcachedにキャッシュすることです。 Memcachedがあなたのためのオプションではない場合は、あなたのサーバー上に書き込み可能なディレクトリを作成し、そこにページ固有のコンテンツをキャッシュすることができます。したがって、各リクエストでユーザー固有のコンテンツを生成することはできますが、データベースを不必要にクエリするオーバーヘッドはありません。

+0

これは私が知っているように簡単です、あなたは私の問題について答えていない、私は私のページの中間部分だけをキャッシュしたいと私はメタタグをキャッシュしたい、どのように両方のものを達成するために? –

+0

両方で同じテクニックを使うことはできますが、それらを(多少)別々にキャッシュします。 –

+0

それは実際の問題です、私は2つのキャッシュファイル、1つはメタタグと他のコンテンツのために、両方の事を処理するための他の良い方法はありません。 –

0

出力前にコンテンツフィルタを適用します。

動的でなければならないコンテンツの参照IDであるテンプレート内のパーツを単純に使用して、関数呼び出しの結果と置き換えることができます。

例:

<p>some cached content</p> 
<div id="user_box"> {{USER_BOX}} </div> 
<p>other cached content</p> 

まず、キャッシュされたコンテンツを取得し、コード内で、関数呼び出しの結果を用いて{{USER_BOX}}置き換え、そして最終的に出力改変結果。

このようにして、余分なAJAXリクエストをコーディングして実行する必要はありません(パフォーマンスが低下するほどサーバーのパフォーマンスが低下します)。

もちろん、PHPを使用している場合は、Twig(Symfonyの一部)のようなテンプレートエンジンでキャッシュされたコンテンツを扱うことができます。それは条件などのいくつかの余分な機能を追加するだろう

関連する問題