前の記事 ≪:気象図等をアニメーションさせるのに使えるjQueryプラグイン「scianimator...
次の記事 ≫:PHPのコードをJSに変換するプロジェクト「Phjosh」

PHPのAPCコードを予め前もって作成したり削除するPHP関数「apc_compile_file/apc_delete_file」

2010年12月22日-はてなブックマーク

スポンサード リンク
[PR] 英単語を忘却曲線アプリを使って超効率よく記憶する方法
apc_compile_file - ファイルをバイトコードキャッシュに保存し、すべてのフィルタをバイパスする
apc_delete_file - ファイルを opcode キャッシュから削除する

PHPのAPCコードを予め前もって作成したり削除するPHP関数「apc_compile_file/apc_delete_file」。
APCとはPHPのコードを毎回パースしないでもよいように、PHPソースをOpcode形式に変換して共有メモリ等にキャッシュして次回からパースしないようにすることで速度を速める仕組みです。

基本的にAPCがenabledになっている場合は、ユーザからのアクセスをトリガにして、APCのOpcodeを作ります。
この場合、最初の1回目が遅くなるという現象が出ますが、apc_compile_file 関数で次のようにファイルを指定してあげればOpcodeをキャッシュしてくれます。

<?php

$files = array(
   '/path/to/index.php',
   '/path/to/common/header.php',
   '/path/to/common/footer.php',
   .... キャッシュしたいコードを羅列
);

foreach ($files as $file) {
   apc_compile_file($file);
}
?>

アクセスが多くて、PHPのソースコードも大量にあるサイトなんかの場合は、サービス投入前に上記のコードを動かしておけば1回目が遅いという現象は避けられます。
find コマンドでPHPのソース一覧を作ってループさせるとよさそうですね。facebookでは昔やってたみたい。
(cli の場合は動かない場合があるので設定を見直しましょう)

キャッシュ結果は、apc.php の管理画面で確認できると思います。



逆に、キャッシュされたOpcodeを削除したい場合は、APCの3.1.1というバージョンから追加されたapc_delete_fileを呼び出せば削除できます。
apc.stat=0等にしてファイルの変更を無視する設定であってもこの関数を呼び出すことで特定のファイルのキャッシュのみを削除することができ、部分的に最新への反映が可能みたいです。

以前は、キャッシュしたコードは、apc_clear_cache で全部のキャッシュをクリアする方法しかなかった気がしますが便利になったようです。

殆どのケースにおいて、ユーザからのアクセスをトリガにキャッシュする方式で問題ないように感じますが、テクニックとして覚えておいても損はなさそう、ということで公開してみました。

関連エントリ
関連の記事検索:PHP, apc, チュートリアル, キャッシュ
スポンサード リンク

By.KJ : 2010年12月22日 10:10 livedoor Readerで購読 Twitterに投稿

間違いの指摘をしていただける方はメール、あるいはTwitter/FBでお願いします(クリック)