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);
}
?> |