金曜日, 13 7 月 2007

PHPベンチマーク: Zend Framework vs Symfony vs CakePHP vs CodeIgniter vs PHP on TRAX この記事(PHPベンチマーク: Zend Framework vs Symfony vs CakePHP vs CodeIgniter vs PHP on TRAX)を「はてなブックマーク」に追加 この記事をクリップ! この記事(PHPベンチマーク: Zend Framework vs Symfony vs CakePHP vs CodeIgniter vs PHP on TRAX)を「del.icio.us」に追加

« Macでバックアップ: ChronoSyncを使う | Main | Macの小技: Macをリモコンでスリープさせる方法 »
先日、Zend Frameworkが正式に1.0.0としてリリースされました。
公式だし今後使っていこうかなと思ったんですが、最近人気のある他のPHPフレームワークと比べて
パフォーマンスの面でどう違うか気になったので簡単なベンチマークをとって比較してみました。

今回使用したフレームワークはZend FrameworkSymfonyCakePHPCodeIgniterPHP on TRAXの5つです。
各フレームワークで行った処理はコントローラを呼び出しビューに遷移させて
"Hello World!"を表示させるだけのかなりシンプルな内容です。
DBへの接続やモデルの作成は行わず、自動レイアウト機能があるものはオフにするか全て削除しています。
使用したソースはこちらからダウンロードできます。

ベンチマークを行った環境はCeleron 1.7GHz、メモリ1GBのLinux上でApache2.0系、PHP-5.2.3を使用し、
各フレームワークのバージョンは一般配布されているstable系の最新版を使用しました。
(Zend Framework 1.0.0、Symfony 1.0.5、CakePHP 1.1.16.5421、CodeIgniter 1.5.3、PHP on TRAX 0.14.0)
ベンチマークの方法はab(Apache付属のベンチツール)を-c 100 -n 1000のオプションで
ローカルホストから呼び出す形で行いました。
それを各々5回ずつ行い、そのRequsts per secondの平均を結果として出しています。

以下がベンチマーク結果です。

Zend Framework 16.7 Request/Sec 2.8 %
Symfony 10.7 Request/Sec 1.8 %
CakePHP 12.8 Request/Sec 2.2 %
CodeIgniter 33.2 Request/Sec 5.7 %
PHP on TRAX 7.8 Request/Sec 1.3 %
(参考)フレームワーク無し 586.1 Request/Sec 100.0 % -


またAPCを有効にした状態でもベンチマークを取ったのでそれも載せておきます。
本当はeAcceleratorを使いたかったのですが、有効にするとZend、Symfony、TRAXで
エラーが発生したため今回は使用しませんでした。

Zend Framework 65.1 Request/Sec 9.5 %
Symfony 45.9 Request/Sec 6.7 %
CakePHP 63.9 Request/Sec 9.3 %
CodeIgniter 133.7 Request/Sec 19.5 %
PHP on TRAX 54.2 Request/Sec 7.9 %
(参考)フレームワーク無し 684.3 Request/Sec 100.0 % -


結果はAPCの有無に関わらずCodeIgniterがぶっちぎりの優勝で次いでZendという事になりました。
SymfonyとCakePHPはAPC無しでは差は小さいですが、APCを有効にするとCakePHPが大きく勝るようです。
TRAXはAPC無しではかなり遅いですが、有効にすると劇的にパフォーマンスが向上しました。

ついでにXdebugを使い各フレームワークの関数コールをトレースしステップ数を計ってみました。
以下がその結果です。

Zend Framework 446 Steps
Symfony 934 Steps
CakePHP 854 Steps
CodeIgniter 310 Steps
PHP on TRAX 510 Steps


やはりCodeIgniterが一番ステップ数が少ないという結果になりました。
そのおかげで高いスループットを実現出来ているんでしょうね。

ベンチマークを行った結果、残念ながらZendが一番という事にはなりませんでしたが、
悪い結果ではなかったので使ってみる価値はあるんじゃないかなと思います。
しかも日本語ドキュメントがかなり完成されているのでその点も魅力的なのではないでしょうか。


注) 今回行ったベンチマークはごく単純なものなので
  実際のシステムで必ずしもこの結果の通りになるとは限りません。
  またパフォーマンスが高いというだけで有用なフレームワークというわけでもありません。
  あくまで参考としてお考え下さい。

追記) CakePHPのソースについてモデル生成が有効になっていたため、
  ソースを修正しベンチマークを再度行って結果を修正しました。
Posted by tsujitako at 8:40 午前 in PHP/

Your comment:

(not displayed)
 
 
 

Live Comment Preview: