金曜日, 13 7 月 2007
| PHPベンチマーク: Zend Framework vs Symfony vs CakePHP vs CodeIgniter vs PHP on TRAX |
|
先日、Zend Frameworkが正式に1.0.0としてリリースされました。
公式だし今後使っていこうかなと思ったんですが、最近人気のある他のPHPフレームワークと比べて
パフォーマンスの面でどう違うか気になったので簡単なベンチマークをとって比較してみました。
今回使用したフレームワークはZend Framework、Symfony、CakePHP、CodeIgniter、PHP 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の平均を結果として出しています。
以下がベンチマーク結果です。
またAPCを有効にした状態でもベンチマークを取ったのでそれも載せておきます。
本当はeAcceleratorを使いたかったのですが、有効にするとZend、Symfony、TRAXで
エラーが発生したため今回は使用しませんでした。
結果はAPCの有無に関わらずCodeIgniterがぶっちぎりの優勝で次いでZendという事になりました。
SymfonyとCakePHPはAPC無しでは差は小さいですが、APCを有効にするとCakePHPが大きく勝るようです。
TRAXはAPC無しではかなり遅いですが、有効にすると劇的にパフォーマンスが向上しました。
ついでにXdebugを使い各フレームワークの関数コールをトレースしステップ数を計ってみました。
以下がその結果です。
やはりCodeIgniterが一番ステップ数が少ないという結果になりました。
そのおかげで高いスループットを実現出来ているんでしょうね。
ベンチマークを行った結果、残念ながらZendが一番という事にはなりませんでしたが、
悪い結果ではなかったので使ってみる価値はあるんじゃないかなと思います。
しかも日本語ドキュメントがかなり完成されているのでその点も魅力的なのではないでしょうか。
注) 今回行ったベンチマークはごく単純なものなので
実際のシステムで必ずしもこの結果の通りになるとは限りません。
またパフォーマンスが高いというだけで有用なフレームワークというわけでもありません。
あくまで参考としてお考え下さい。
追記) CakePHPのソースについてモデル生成が有効になっていたため、
ソースを修正しベンチマークを再度行って結果を修正しました。
公式だし今後使っていこうかなと思ったんですが、最近人気のある他のPHPフレームワークと比べて
パフォーマンスの面でどう違うか気になったので簡単なベンチマークをとって比較してみました。
今回使用したフレームワークはZend Framework、Symfony、CakePHP、CodeIgniter、PHP 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 at 8:40 午前 in PHP/






