ZendFramework2のパフォーマンスについて
前日書いた「TDC-PHP勉強会#24にて発表してまいりました。」にて、2012年のパフォーマンス資料を掲載していましたが、ZFコミュニティで活動していらっしゃるid:sasezakiさんより以下のご指摘を頂いたので、やはり本年度のパフォーマンス資料はあったほうがいいなということで、まとめてみます。
enriseのZF2のパフォーマンスの記事って ServiceManager導入前のやつだから全く参考になりませんよ。。
— sasezaki (@sasezaki) February 23, 2013
計測に使ったマシン
計測に利用したマシンは以下のとおりです。 今回はVirtualBoxを利用しています。(VMを買うお金がありません><)
ホスト側
- MacBook Pro(OS X 10.8 Mountain Lion)
- 2.3 GHz Intel Core i5
- 8GB RAM
- 320GB 5400RPM
VirtualBox側
※ Ubuntu Serverインストール時に「LAMPパック」を指定してインストールしています。
ベンチマークの計測に利用する物
ZF1は1.12.1を、ZF2はGithubに公開されているZendSkeletonApplication-2.1.0を利用します。 この時のZF2のバージョンは2.1.3になります。
ベンチマークの取り方
ベンチの取り方は、以前ENRISEにより行われたZend Framework2 Performanceにのっとり、以下のようにします。
- Apacheを再起動し、5秒ほど待つ
- ZF1にabテストを利用して実行結果を書き出す
- Apacheを再起動し、5秒ほど待つ
- ZF2にabテストを利用して実行結果を書き出す
- GNUPlotを利用してグラフを書き出す
また、以下の内容でテストを行います。
- 2000のリクエスト、5の同時アクセス
- 2000のリクエスト、10の同時アクセス
- 2000のリクエスト、20の同時アクセス
- 2000のリクエスト、40の同時アクセス
- 2000のリクエスト、80の同時アクセス
ベンチマークを取得する際に、ベンチマーク実行のためのシェルスクリプトを利用しています。 これはTrafeX氏が公開しているシェルスクリプトを少し改変(リクエスト先URL等)したものを利用しています。
実行結果
実行結果はこのような感じに。
結論
4秒どころか、かなり遅くなっています。
結果としてはZF2はZF1に比べ、実行速度の面では遅くなっていますが、機能面ではServiceManagerや、DI、EventManager等、豊富な機能を有しています。
速度面ではサイトによってどのような設定を施すかで左右されますが、symfonyのように利用するクラス全てを1箇所にまとめてキャッシュしたり、表示キャッシュをしたりなどで改善される場合があります。
(それとベンチマークの取得に少し自信がない\(^o^)/)