APC のキャッシング機能と、中間コードを最適化し、コンパイル済みコードをキャッシュする機能を混同しないでください。APC は 2 つの異なるものを提供します。
- データ構造 (オブジェクト、配列など) をキャッシュする便利な方法を提供するため、apc_store および apc_fetch でそれらを保存/取得できます。
- スクリプトのコンパイル済みバージョンを保持するため、次回の実行時に高速に実行されます
(1) の例を見てみましょう: 計算に 1 秒かかるデータ構造があるとします:
function calculate_array() {
sleep(1);
return array('foo' => 'bar');
}
$data = calculate_array();
遅い calculate_array() を再度呼び出す必要がないように、その出力を保存できます。
function calculate_array() {
sleep(1);
return array('foo' => 'bar');
}
if (!apc_exists('key1')) {
$data = calculate_array();
apc_store('key1', $data);
} else {
$data = apc_fetch('key1');
}
これはかなり速くなり、元の 1 秒よりもはるかに短くなります。
さて、上記の (2) について: APC を使用しても、プログラムの実行が 1 秒より速くなることはありません。これは、calculate_array() が必要とする時間です。ただし、ファイルの初期化と実行にさらに (たとえば) 100 ミリ秒必要な場合、APC を有効にするだけで (約) 20 ミリ秒必要になります。したがって、初期化/準備時間が 80% 増加します。これは実稼働システムに大きな違いをもたらす可能性があるため、APC をインストールするだけで、スクリプトの関数を明示的に呼び出さなくても、スクリプトのパフォーマンスに顕著なプラスの影響を与えることができます。