2012年9月6日木曜日

PHP本体は遅くはない。フレームワークが遅い

今サービス中の別件の案件。

小生が、かなりメモリ使用量に気を遣って書いた箇所は、160request /s出ているらしい。
よく判らないが、検索してみると、これって速いほうですね。
apache+mod_phpのオーソドックスな構成。
ハード構成を言えって?それはここで論じたいネタではないので割愛。

「PHPで性能が出ない!」とお悩みの人を色々検索してみると、
最も典型的なのが「WordPressが」とか。
http://kray.jp/blog/wordpress-tuning/
http://stackoverflow.com/questions/8853692/php-is-slower-than-it-should-be

「性能が出ない」でお困りの皆さん。これらの共通点は、超大作フレームワークの利用。これに尽きます。案件にもよりけりでしょうが、昨今では、

  1. とりあえずフレームワークを使って
  2. 短期間で仕上げて
  3. 性能面はクラウドでどうにかする

なんて手法もアリでしょう。

メイン関数を5行で書けます!という触れ込みで、実はincludeの向こうは5万行を毎回ロードしてますとか。特定のフレームワークの話はしてません。ものの例え、でもそれがPHPフレームワークの本質です。

JAVAであれば、悪い発想ではない。メモリに常駐しまくりなんで。故にスタートアップに10秒かかるとしても。それを「言語仕様がJAVAに似てるだけ」のPHPが真似しよう、ってのがそもそもの間違い。

逆に「クラウドじゃないので、湯水の様には増やせません」と言うなら2択です。

  1. PHPを辞めるか
  2. フレームワークを辞めるか(裸のPHPで書けと)

何故って?

  • 「フレームワーク」は、大量のファイルをincludeし、動的コンパイルを繰り返す。
    • 故に、メモリに常駐しないPHPとは、非常に相性が悪い。
    • ちなみに、adobe AMF frameworkは、3Mb食います。
  • APC等で解決するのは、「コンパイルに要するCPUパワー」だけ
    • 実は、PHPの動的コンパイル速度は、かなり速い。


早い話が、どうしてもPHPを使いたければ、

  • 裸のPHPで
  • 総実行300行未満で
  • メモリ使用量は、標準の8Mbから更に減らして1Mbぐらいでやりくり
でなければ意味がありません。さもなければ結局性能で悩まされるんで。
そんなの書いてられないよって?当たり前です。要するにPHPを使うなって、ことです。