PEAR::Cache_Lite は小さなキャッシュシステムです。 高トラフィックな Web サイト向けに最適化されていますので、本当に高速でかつ安全です (これはファイルロックや対汚染のテストを行うためです)。
メモ : Cache_Lite の独立した中国語ドキュメントは このページ で利用できます。
とりわけ、PEAR::Cache_Lite は非常に高速である必要があります。 これはハイレベルなハードウェアソリューションでダウンしない高トラフィックな サイトでの PEAR 利用の可能性を与えます。
cache_lite の技術的な選択についての詳細は、 このドキュメント にあります。 しかし、エラーが発生した場合 (非常に稀です) の主となるアイデア だけは、PEAR.php ファイルに含まれています。
Cache_Lite の全てのモジュールは同じ考え方に従っています。
パラメータ (デフォルトではない他の値) は連想配列を使って コンストラクタに渡されます。
キャッシュファイルはキャッシュID (と最後にはグループ) によって識別されます。柔軟性を持たせるため、 ID のロジックは開発者が選択することができます。
これ以降「グループ」はキャッシュファイルを貯めたもの、 「ブロック」は HTML ページの一部という意味で使用します。
簡単な例から始めましょう : とある一意な変数 (文字列) をもってページが生成され、復元されます。
<?php // パッケージを include する require_once('Cache/Lite.php'); // このキャッシュのIDを設定する $id = '123'; // いくつかのオプションを設定する $options = array( 'cacheDir' => '/tmp/', 'lifeTime' => 3600 ); // Cache_Lite オブジェクトを生成する $Cache_Lite = new Cache_Lite($options); // このIDに対する有効なキャッシュがあるかどうかテストする if ($data = $Cache_Lite->get($id)) { // キャッシュがヒットした ! // コンテンツは $data に入っている // (...) } else { // 有効なキャッシュが見つからなかった (このページを生成する必要がある) // キャッシュミス ! // キャッシュに入れるデータを $data に入れる // (...) $Cache_Lite->save($data); } ?> |
もしブロック毎のキャッシュを使用したいがグローバルキャッシュにしたくない場合、次のようなスクリプトになります:
<?php require_once('Cache/Lite.php'); $options = array( 'cacheDir' => '/tmp/', 'lifeTime' => 3600 ); // Cache_Lite オブジェクトを生成する $Cache_Lite = new Cache_Lite($options); if ($data = $Cache_Lite->get('block1')) { echo($data); } else { $data = 'Data of the block 1'; $Cache_Lite->save($data); } echo('<br><br>Non cached line !<br><br>'); if ($data = $Cache_Lite->get('block2')) { echo($data); } else { $data = 'Data of the block 2'; $Cache_Lite->save($data); } ?> |
しかしながら、単一文字変数で全てのページコンテンツを復元することは常に可能ではありません。Cache_Lite_Output は、このようにして私たちの助けになります :
<?php require_once('Cache/Lite/Output.php'); $options = array( 'cacheDir' => '/tmp/', 'lifeTime' => 10 ); $cache = new Cache_Lite_Output($options); if (!($cache->start('123'))) { // Cache missed... for($i=0;$i<1000;$i++) { // Making of the page... echo('0123456789'); } $cache->end(); } ?> |
この考えは、ブロック毎のキャッシュの使用法と同じです :
<?php require_once('Cache/Lite/Output.php'); $options = array( 'cacheDir' => '/tmp/', 'lifeTime' => 10 ); $cache = new Cache_Lite_Output($options); if (!($cache->start('block1'))) { // キャッシュミス ... echo('Data of the block 1 !'); $cache->end(); } echo('Non cached line !'); if (!($cache->start('block2'))) { // キャッシュミス ... echo('Data of the block 2 !'); $cache->end(); } ?> |
Cache_Lite を使って最大限の効果を得るためには、 ページが必要とする全てのパッケージを機械的に include しないでください。 条件付きの include を使用していることでページがキャッシュされていない (そして、再計算しなければならない) 場合、必要なモジュール だけ をロードするようにしてください。
良くない 方法 :
<?php require_once("Cache/Lite.php"); require_once("...") require_once("...") // (...) $cache = new Cache_Lite(); if ($data = $Cache_Lite->get($id)) { // キャッシュがヒットした ! echo($data); } else { // $data にページデータを(再)構築する必要がある // (...) $Cache_Lite->save($data); } ?> |
こちらはよい方法です (通常2倍早くなります) 。
<?php require_once("Cache/Lite.php"); // (...) $cache = new Cache_Lite(); if ($data = $Cache_Lite->get($id)) { // キャッシュがヒットした ! echo($data); } else { // $data にページデータを(再)構築する必要がある require_once("...") require_once("...") // (...) $Cache_Lite->save($data); } ?> |