PHPのコードキャッシュがなぜ速いのか

Matzにっきから。

私の理解が正しければ、スクリプトキャッシングは、プログラムのロード時に構文解析を行い、内部的に用いる中間表現に変換したものを保存しておくことにより、構文解析のコストを削減し、高速化を実現する技術である。PHP以外にもたとえばPythonが同様のことを実現している (でも、Pythonは1.3倍とか言ってない)。

PHP - スクリプトキャッシング

まず、mod_php内でのスクリプトの実行が終了すると、特別な場合を除きすべての環境がリセットされます。再度同じスクリプトを実行すると、ファイルから読み直しになるので、構文解析をすっ飛ばせるのはそれなりにメリットがあります。


PHP界では「コードキャッシュ」という用語が定着していますが、Zendの製品などのコードキャッシュプログラムは、単純に内部opcodeをメモリ/ファイルにキャッシュするだけではなく、実行コードの最適化なども同時に行われます。Zendの製品はその分も含めて1.3倍から3倍と言っているわけですね。

Rasmus at Yahoo! have been using a patched version of PHP running on their FreeBSD boxes. The reason is that PHP generates lots of stat calls which really slows down the system on FreeBSD.

Optimizing PHP for Intel based Mac / PHP / Tags / Papelipe -

またRasmusによると「PHPは内部でstat()を呼びまくっているので遅い」とのことですので、include_pathの後ろの方のディレクトリにあるスクリプトファイルを大量にrequireしていたりすると、それだけでコードキャッシュのメリットが出てくるのかもしれません。ただこの文章もPHP 4.3 のころの話なので、今のPHP-5.2でも状況が同じかどうかは調べていません。