2012-03-14 8 views
2

MVCアプリケーションのビューレベルでキャッシュを実装しようとしています。アプリケーションは、カスタムPHP MVC +いくつかのzendライブラリですが、私はその質問がどのMVCスタックにも当てはまると思います。インデックスまたはタグを使ってキャッシュ用のライブラリがありますか?

私が達成したいのは、部分/ブロックは無効にするがページ全体を無効にするキャッシュです。 ビューはレイアウトで構成され、各レイアウトはブロック/パーシャルで構成され、各パーシャル自体は再びパーシャルで構成されます。普通ではない。部分データの多くは同じデータを使用し、データが変更された場合はすべて無効にする必要があります。同じように、一部のパーシャルは異なるモデルのデータを使用し、データが変更されると無効にする必要があります。

私が達成したいのは、新しい部分またはレイアウトが作成されるたびにコードを変更するためにモデルに戻る必要がないシステムです。私の考えは、各キャッシュ項目が何らかの形で「タグ付け」されている可能性があるということでした。データレベルでは、そのタグを使用してすべてのキャッシュ項目を無効にできます。新しいパーシャルを作成する場合は、キャッシュされたブロック内で使用されているすべてのタグでタグ付けする必要があります。

タグを関連するすべてのCacheIdとリンクするキャッシュにインデックスを格納すると想像できます。

質問1:このようなライブラリは存在しますか?私は車輪を再発明することは嫌いだ。
質問2:ORには異なる「ベストプラクティス」があり、私の推論には欠陥があります。

推敲:
はちょうど私が達成するためにwan'tものに近いあるこの出くわしたが、PHP http://37signals.com/svn/posts/3112-how-basecamp-next-got-to-be-so-damn-fast-without-using-much-client-side-ui

に私の質問は、そのようにするとき、私は、データへのキャッシュキーをマップ行う方法ですデータが更新されます無効にするキャッシュを知っていますか?キャッシュキーがビューに設定され、クリアはモデル(onSave、onDelete)で行われます。どのモデルがどのキャッシュを削除すべきかをモデルはどのように知っていますか?たとえば

:以下のビューにキャッシュされ

は、それぞれ、検索のための一意のキーを生成します。

部分1:ユーザーYによって
製品X = partial1/x.id-y.idユーザYによって
生成物Z = partial1/z.id-y.id

と私は同じ使用再びユーザが、コメント

部分2は、この時間:ユーザーYによって
コメントA = partial2/a.id-y.id
ユーザによる コメントB Y = partial2/b.id-y.id

今、ユーザーを更新するとyのonSaveでは、yに依存するすべてのキャッシュされた部分を知ることができません。私はすることができますが、私はすべてのキャッシュキーを取得し、yがそれらにある場合は、1つずつテストする必要があります。

キーがy.idに依存するマップを維持すると、キーの名前がわからなくても簡単にキャッシュをクリアできます。ビューレベルがインデックスを満たすと、モデルはキーを使用してキーをルックアップし、それらのキャッシュを無効にできます。したがって、上記の例では、キャッシュを作成した後、私は、次のインデックスだろう:

x.id = [partial1/x.id-y.id] 
z.id = [partial1/z.id-y.id] 
a.id = [partial2/a.id-y.id] 
b.id = [partial2/b.id-y.id] 
y.id = [partial1/x.id-y.id, partial1/x.id-y.id, partial1/z.id-y.id, 
partial2/a.id-y.id, partial2/b.id-y.id] 

答えて

0

を私はあなたがタグの物語で行っている場合は、あなたがややさらにそれを説明することがありますか分かりません。

しかし、サーバーサイドインクルード(PHPで簡単に処理できます)を使用して部分キャッシュを行うことができます。を使用してください。partial1.htmlはバックエンドから生成されたHTMLデータのキャッシュブロックです。こうすることで、例えば記事のテキストを保存し、記事を編集するときにhtmlファイルを更新することができます。

+0

、これは私が達成しようとしているものをアップクリア願っています。 –

0

レンダリングされたページをファイルにキャッシュする簡単な方法が1つあります。これは、Apacheの高速化を可能にします。Apacheは、静的なページには理想的です。

キャッシュ機構は、このようなものです:私は質問を詳述

(1) No caching for POST requests 

(2) Save all rendered pages for GET requests, save to files, eg. 
$Cache_File = "cache/".md5($_SERVER["REQUEST_URI"]).".html"; 

(3) Up on a new GET request, get the md5 of URI, 
then check if file existing in cache, take it out and 
flush to browser. 
+1

これは主に静的なサイトで有効ですが、データが変更され続けると古いキャッシュが存在するか、あまり頻繁にキャッシュをクリアする必要がありません。私が望むものの例へのリンクを加えました。 –

関連する問題