PHP高速化の手法について(2011/5)

PHPの高速化の手法について改めてまとめてみる。

歴史の長いPHPの高速化手法はいくつかに分かれていて、

1.事前コンパイルしてキャッシュするタイプ
  リクエストの度に実行されるコンパイル時間がオーバーヘッドなので
  (事前|初回実行時)にコンパイルして、同時に最適化を行い、
  それを(メモリ|ファイル)にキャッシュしておくことで高速化を図る。
  古今東西PHPではいくつも出ては消えの古典的かつ安定している(と思われる)手法。

2.高速な言語に変換しちゃえ
  インタプリタで実行じゃなくてコンパイルする言語に変換して実行すれば速くね?
  というアプローチ。
  調べると結構あるみたいだけど、寡聞にしてHipHop for PHPくらいしか聞いた
  事がありません。日本国内での利用実績ってあるのかなぁ?

3.FAST CGI的なアプローチ
  常駐しておけば1.よりも速くね?という、FAST CGIの手法をお借りしてみました的手法。
  まぁ、PHPもFAST CGIで動くわけですが、それよりも速い、のだろうと思われ。

というのが主な分類かな。

一つの言語でこれだけ多岐にわたる高速化手法が選択できるって、
ステキというかなんというか。。。選ぶの困っちゃうよね。

で、ちゃんとしてるところはもうPHP5.xだと思うんだけど、まだ4.xな環境も
存在するだろうということで、わかる範囲で4.xの対応状況も併記してみる。

ではいってみよー!

1.事前コンパイルしてキャッシュするタイプ

  APC
    3.1.8(release 2011/5/2)はPHP5.1以降をサポート。
    PHP4.xについては3.0.x台は使えた模様。

  eAccelerator
    0.9.6.1(release 2010/05/31)はPHP5.3/5.2/5.1をサポート
    0.9.5.1(release 2008/5/18)はPHP5.2/5.1/4.xをサポート

  XCache
   1.3.1(release 2010/11/27)はPHP5.3をサポート
   1.0系は4.3.x/4.4.xをサポートしている模様だが。。。 

  Zend Optimizer
    本家本元の最適化モジュール。
    5.2までに対応するものは無償でダウンロードできますが、
    5.3以降に対応するものから、ZendServerという有償プロダクトに
    同梱されるものとなりました。(ZendOptimizer+という名称に変更)
    もちろんPHP4.xにも対応。

2.高速な言語に変換しちゃえ

  HipHop for PHP
    C++に変換する、らしい。Facebookの中の人が作成。

  quercus
    Java内でPHPを実行できる、らしい。

  Phalanger PHP compiler
     .NETに変換する、らしい。

  Roadsend
    PHPの別実装らしい。
    FASTCGI向けのバイナリが生成できる、のかな。

  phc
    PHPのコンパイラ。
    .phpからCのソースを生成して、.so(shared object)を生成できるらしい。

3.FAST CGI的なアプローチ

  GreeFastProcessor(GitHubはこっち)
    0.1(release 2010/10/20) バージョン互換は書いてないなぁ。。。
    5.xで動くと思われますが、、、
    GREEの中の人が作成。

  FastCGI ProcessorManager(PHP-FPM)
    ここに混ぜてもいいものかと思いつつ。
    PHP純正のFASTCGIの別実装、とのこと。
    実際にはこれ+1.のアクセラレータで高速化らしい。


さーて、どれを使うかなー、と思ったあなた、まずは1のどれかを入れてみるのが
手っ取り早く高速化の恩恵を受けられますよ。

3.については最終的に1.と組み合わせて使う事で効果が増すのではないか、
という所なのですが、やってないのでなんともです。(だれか〜)

あとはどのWebServerと組み合わせるのか、は結構キモなんですが、
ほとんどの人はApacheだと思うので1.止まりかなと。

うーん、のこりのGWはなにしよっかなー。