コンテンツ キャッシュ出力 PEAR キャッシュ
次に、この記事の焦点でもある、より一般的に使用されるキャッシュ テクノロジの調査を開始します。まず、PEAR のキャッシュ パッケージを使用します。 PEAR は、ファイル、データベース、またはメモリにコンテンツをキャッシュできます。ファイルを例に挙げてみましょう。
これは、キャッシュを使用しない小さな PHP プログラムです:
pear_content_cache1.php
<?php
echo "これがコンテンツです。<P>";
echo "現在時刻は" . date('MdY H:i:s A', time()) "<BR>";
?>
上記のプログラムは非常に単純ですが、これにキャッシュを追加します。
pear_content_cache2.php
<?php
require_once 'Cache/Output.php';
// 書き込み可能でなければならないキャッシュ ディレクトリを設定します $cacheDir = './pear_cache';
$cache = new Cache_Output('file',array('cache_dir' => $cacheDir));
// nocache 変数が空の場合は、キャッシュ内のコンテンツを使用します // 最新のコンテンツを取得したい場合は、それを割り当てますnocache 変数に if (empty($_REQUEST['nocache']))
{
// 固有のキャッシュ ID を作成します // リクエスト + Cookie 情報 $cache_id = $cache->generateID(array('url' => $_REQUEST,'post' =>$_POST,'cookies' => $HTTP_COOKIE_VARS) );
}
それ以外
{
//最新のコンテンツを取得したい場合、IDは空です $cache_id = null;
}
//キャッシュ ID に対応するキャッシュ コンテンツが利用可能かどうかを確認します if ($content = $cache->start($cache_id))
{
// キャッシュはすでに存在するため、直接出力してスクリプトを終了します echo $content;
出口();
}
// コンテンツがキャッシュに存在しないため、新しいコンテンツを生成してキャッシュに書き込みます echo "これがコンテンツです。<P>";
echo "現在時刻は" . date('MdY H:i:s A', time()) . "<BR>"
// コンテンツをキャッシュに書き込みます echo $cache->end();
?>
これら 2 つのファイルをそれぞれ更新すると、pear_content_cache1.php の「現在時刻は」という行の時刻が更新によって変化しますが、pear_content_cache2.php のこの行は変化しないことがわかります。これは、pear_content_cache2.php がキャッシュを使用して、ユーザーが要求したコンテンツを静的ファイルに保存するためです。ユーザーが再度リクエストすると、プログラムがコンテンツを動的に生成する必要がなく、ファイルから直接出力されます。
pear_content_cache2.php の場合、ユーザーがキャッシュ内の古い情報ではなく最新の情報を読み取りたい場合。その後、 http://…/pear_content_cache2.php?nocache=1を使用してアクセスすると、キャッシュ機能が無効になります。更新すると、それに応じて時間が変更されることを確認します。
PEAR コンテンツ キャッシュ クラスの使用を要約すると、次のようになります。
1. PEAR パッケージを含める場合は、必ず正しいパスを設定してください。
2.
require_once 'Cache/Output.php'
3
にキャッシュ クラスが含まれます
。キャッシュ ディレクトリを設定します
$cacheDir = './pear_cache';
このディレクトリが書き込み可能であることを確認します。キャッシュ データは、このディレクトリのサブディレクトリに書き込まれます。
4.出力キャッシュ オブジェクトを作成します
$cache = new Cache_Output('file',array('cache_dir' => $cacheDir));
最初のパラメータは、「file」メソッドに基づくキャッシュを使用することを示し、2 番目のパラメータはキャッシュ ディレクトリに関連付けられた配列。
5.
一意のキャッシュ
ID を生成します
$cache_id = $cache->generateID(array('url' => $_REQUEST,'post' =>$_POST,'cookies' => $HTTP_COOKIE_VARS));
( ) メソッドに一連の情報 (URL、HTTP POST データ、および HTTP Cookie) を提供して、このリクエストを一意に識別し、他のリクエストと区別します。
6.キャッシュIDに対応するキャッシュデータが既に存在するかどうかの論理判定文を追加し、存在する場合はデータを取得してスクリプトを終了します。
if ($content = $cache->start($cache_id))
{
$content をエコーします。
出口();
7.
コンテンツを生成するコードを上記の論理ステートメントの後に配置し、キャッシュ オブジェクトの使用を終了します。
echo $cache->end();
関数 出力キャッシュ PEAR キャッシュ
PEAR は、出力コンテンツをキャッシュするだけでなく、特定の関数を呼び出した結果もキャッシュできます。これは非常に興味深い機能です。プログラムで特定の関数が頻繁に使用され、呼び出しの結果が同じである場合、特にこの関数の実行が遅い場合には、試してみることをお勧めします。
次に、非常にゆっくりと実行される関数、slowFunction() へのバッファリングされた呼び出しを実装します。
<?php
require_once 'キャッシュ/関数.php';
$cacheDir = './pear_cache/';
$cache = new Cache_Function('file',array('cache_dir' => $cacheDir));
$arr = array('リンゴ', '梨', 'スイカ');
$cache->call('slowFunction', $arr);
echo '<BR>'
$arr = array('リンゴ', '梨', 'スイカ');
関数slowFunction($arr);
関数slowFunction($arr = null)
{
echo "実行が非常に遅い関数: ( <br>";
echo "現在時刻は" . date('MdY H:i:s A', time()) ';
foreach ($arr として $fruit)
{
echo "$fruit を食べました<br>";
}
)
?>
以下は、例のスクリプト実行結果です。
実行が非常に遅い関数です。
現在時刻は、2004 年 7 月 28 日 17:15:57 PM です。
リンゴを食べました 梨を食べました スイカを食べまし
た 実行が非常に遅い関数 :(
現在の時刻は 2004 年 7 月 28 日 17:17:55 PM です。
リンゴを食べました 梨を食べました スイカを食べました
コードでは、Cache/Function.php クラスを使用して関数バッファリング関数を実行します。 $cache 変数は、ファイルベースの関数キャッシュを使用する Cache_Function オブジェクトで、$cacheDir ディレクトリに保存されます。関数呼び出しをキャッシュするには、Cache_Function オブジェクト $cache の call() メソッドを次のように使用する必要があります。 $cache->call('slowFunction', $arr);
ここでは、slowFunction() 関数が呼び出され、パラメーターがは配列 $arr です。この関数は $cacheDir ディレクトリ内のファイルにキャッシュされます。この関数に対する後続の呼び出しでは、関数の実行結果が $cache->call() によって返されます。 関数のキャッシュと使用法はコンテンツのキャッシュと非常に似ているため、詳細については説明しません。詳細については、PEAR マニュアルを確認してください。