Nullyのぶろぐ

仙台で働くエンジニアの日記

ZendFramework2のパフォーマンスについて

前日書いた「TDC-PHP勉強会#24にて発表してまいりました。」にて、2012年のパフォーマンス資料を掲載していましたが、ZFコミュニティで活動していらっしゃるid:sasezakiさんより以下のご指摘を頂いたので、やはり本年度のパフォーマンス資料はあったほうがいいなということで、まとめてみます。

計測に使ったマシン

計測に利用したマシンは以下のとおりです。 今回はVirtualBoxを利用しています。(VMを買うお金がありません><)

ホスト側

VirtualBox

  • 1CPU
  • 1024MB RAM
  • 8GB HDD
  • Ubuntu Server 12.10
  • PHP 5.4.6-1Ubuntu1
  • Apache2.2.22
  • apc enabled

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等)したものを利用しています。

実行結果

実行結果はこのような感じに。

f:id:nully:20130224174126p:plain

f:id:nully:20130224174132p:plain

f:id:nully:20130224174133p:plain

f:id:nully:20130224174141p:plain

f:id:nully:20130224174144p:plain

結論

4秒どころか、かなり遅くなっています。

結果としてはZF2はZF1に比べ、実行速度の面では遅くなっていますが、機能面ではServiceManagerや、DI、EventManager等、豊富な機能を有しています。

速度面ではサイトによってどのような設定を施すかで左右されますが、symfonyのように利用するクラス全てを1箇所にまとめてキャッシュしたり、表示キャッシュをしたりなどで改善される場合があります。

(それとベンチマークの取得に少し自信がない\(^o^)/)