Hello Worldコールグラフ
Hello Worldベンチマーク
Performance of YiiというページでPHP主要フレームワークの”hello worldべンチマーク”を比較しています。phpmarkというGoogle Code Projectでホストされてる各フレームワークでHello Worldを出力するアプリケーションでベンチをとっているようです。Hello Worldベンチは最小のオーバーヘッド測定のためとされますが、そのコールグラフがどうなるかに興味を持ちました。
※なぜHello Wolrdなのか?どういう意味があるのか?などについてはPerformance of YiiやPaul M. Jones » Blog Archive » New Year’s Benchmarksなどを参照してください。
コールグラフとは?
コールグラフ (マルチグラフとも呼ばれる) とは、コンピュータプログラムのサブルーチン同士の呼び出し関係を表現した有向グラフである。
コールグラフ描画にはfacebookの開発したxhprof が描画するgraphvizを用いました。web上で描画されたものです。以下、コールするファンクションの少ない順に並べています。
Yii1.0.3Lite
ファンクションコール数:119
PHP APC extension が有効である場合、 yii.phpを yiilite.php で置き換えることがで、さらにパフォーマンスを改善できます。
yiilite.phpはすべてのYiiリリースに含まれています。その内容はYiiの基本クラスをひとつにまとめたものです。コメントとトレース命令はすべて取り除かれています。したがって、yiilite.php を使うことで、インクルードされるファイルの数と、トレース命令の実行を減らすことになります。
というものだそうで、アプローチの仕方はちょっと違うようですがKohanaにもKohana-liteというものがあります。1
そのたっぷりつまったyiilite.phpの読み込みに最も時間がかかっています。
Yii 1.0.3 Lite
Yii 1.0.3
ファンクションコール数:161
YiiはHello Worldベンチの性能が良い原因を「他の遅いフレームワークは必要が無いかもしれないモジュールを初期化しているが、Yiiはレイジーロードを積極的に採用しているため」と説明してますがこのグラフを見る限り最低限のものしか呼び込まれていないすっきりした印象を受けます。
Yii 1.0.3
CodeIgniter 1.7.2
ファンクションコール数:377
Yiiの次にファンクションコール数が少ないのがCodeIgniterです。他のフレームワークと違うのはフレームワークの関数のものがあることでしょうか。最もコールされてるのがload_classの17回、get_config, log_messageと続きます。どれも関数です。
CodeIgniter 1.7.2
Zend Framework 1.7.3
ファンクションコール数:725
Yii, CIに続くのがZend Frameworkです。今回のフレームワークの中で唯一、クラス/メソッドの命名規則がPEARと同じで僕は一番分かりやすく感じました。最もコールされたのはZend_Loader_PluginLoader::_formatNameで17回、時間がかかったのはZend_Controller_Action_Helper_ViewRenderer::getInflectorで全体の5.1%です。
Zend Framework 1.7.3
symfony 1.2.2
ファンクションコール数:1878
もっともカオスなコールグラフになったのがこのsymfonyで7489 x 5683ピクセルの巨大グラフになりました。sfConfig::get()が147回呼ばれ最も時間のかかったメソッドになっています。
symfony 1.2.2
CakePHP 1.2.1
ファンクションコール数:12,166
コール数が桁違いに多いので何かの間違いではないかと思いましたがMASA-Pさんの【CakePHP】xhprofでCakePHPのパフォーマンスを丸裸にする | ECWorks Blogという記事でも13,000を超えるコール数になっているのでこれで間違いではないと思います。特にFolder::系のコールが多いようです。
グラフのサイズはややsymfonyより小さいですがほぼ同等です。
CakePHP 1.2.1
Disclaimer
phpmarkのサイトにもあるのですが、このエントリーでも同じです。
- 特定のフレームワークを応援したり攻撃する意図はありません。
- ミニマムオーバーヘッドが低いというのはフレームワーク評価基準のごく一部です。フレームワーク選定で重視しすぎるべきではないでしょう。
関連リンク
- [Yii PHP Framework – Performance Comparison][1]
- phpmark – Project Hosting on Google Code
- Paul M. Jones » Blog Archive » Differences Between Solar and Zend Framework
- web-framework-benchmarks – Project Hosting on Google Code
- DooPHP – Benchmark, the fastest PHP framework
- Simple is Hard2
- PHP Framework Benchmarks: Entertaining But Ultimately Useless4