思い立った理由
前回、zephirに触れて初投稿をしてから2週間ちょっと。
自分のモジュールのベンチも取っては見たものの、
この結果だけ記事にしてもあまりおもしろくないなぁ、と思い。
せっかくなので幾つかのフレームワークでチュートリアル初歩の初歩状態でベンチマーク計測して遊んでみましたので、
その結果を書いてみようかなぁ、と思います。
お願いと注意点
- お金等いろいろないのでVirtualBox環境でやりました。正確な数値じゃないのはごめんなさい。
- 私は「スケールアウト重視」「可読性重視」といったタイプの人なので、あまりこのデータの有用性とかは考えてませんので、参考程度でよろしくお願いします(汗)
- そもそもほぼ静的なページを描画するベンチに意味があるのかってツッコミもなしで・・・
環境
- MacMini(OSX 10.11.6)上でVirtualBoxを立ち上げCentOS6.8の仮想VMを作成し実行しました。
- Webのフロントはnginx(v1.10.2)を利用しています。
- PHP-fpm(v7.0.14)をUnixドメインソケットで受けて実行しています。Opcacheをenableにしてあります。
- 割当てCPU数が1なので、子プロセス数も1にしてあります。
- 転送量を同じにするため、どのフレームワークも描画するページはCodeIgniter3のWelcomeページに差し替えています。これをViewファイル(テンプレートファイル)を読み込む形で描画させています。
- ベンチはローカルからapache bench(v2.3)で取りました。
実行コマンドはab -c 100 -t 5 http://localhost/
のようになります - (一応慰め程度に)ベンチを5回取り、その平均のReq/secを調べました。
PHP7.1で動かそうと思ったらZephirが対応していないみたいでビルドしてもセグフォで落ちたので7.0で・・・
対象
対象にしたフレームワークは下記のものにしました
Phalcon3 (3.0.2)
https://phalconphp.com/ja/
PHPモジュール形式のフレームワーク。
速度を求める皆さんに大人気。最近はzephirで書かれているみたいです。
(というかzephir提供してくれてありがとうございます)
今回は手っ取り早くremiリポジトリのphp-phalconを利用しました
CodeIgniter3 (3.1.2)
https://codeigniter.com/
コードベースのフレームワークの中では一番早いと謳われてるみたいです。
Elislabのライセンス絡みで倦厭された時期もありますが、
その速度を理由に使う人も多いみたいです。
あ、そろそろ4が出るらしいですが、なんか機能を聞く限りイケてるフレームワークの気がします
(先日の段階で速度は3の約15%増し?でした)
CakePHP (3.3)
https://cakephp.org/jp
言わずもがな「PHPでフレームワークといったらCakeでしょ?」とか言われてしまうやつです。
PHPカンファレンス2016でも人気みたいでした。
個人的には昔バージョン違いで痛い目見たり、FatControllerにならざるを得なかったりで、あまり使わないかもしれません・・・。
Laravel (1.3.3)
https://laravel.com/
アーティザン(職人)のためのフレームワーク・・・という響きもさることながら、
PHPカンファレンス2016のフレームワーク投票でCakeと双璧だったらしいです
デザイン性の強いWebサービスの方から「使ってる」って話を聞くような気がします。
※ちなみに私はYii2が好きなのですが・・・・アレ?
結果
以下の表のとおりになっています。
Framework | Req/Sec |
---|---|
Phalcon:3.0.2 | 844.066 |
CodeIgniter:3.1.2 | 106.068 |
CakePHP:3.3 | 16.194 |
Laravel:1.3.3 | 27.788 |
なんだろ・・・CakePHPが予想以上にスピードが出てない
debug=0にはしたのだけど、なにか設定が足りないとかなのでしょうか・・・。
Phalconは自由度が高いので、エンジン自体が軽量ですけど、
フレームワークとしてどう使うかがプロジェクトの質に左右されそうです。
で・・・
以前より他の方がベンチマークを上げられてたりしたときと、
そんなに変わらないかな(CakePHP除く)といった感じで、
「もっと他に良い記事あるよ・・・」となると思った次第です。
なので、ここからちょこっとだけ追加を。
Django
https://www.djangoproject.com
nginx + uwsgi(2.0.14) + Python(3.5.2) + django(1.10.4)でも、
同様のことをやってみました。
Python結構好きですが、まだ本当に詳しいところまでは知らないんですよね・・・
以前はgunicornを使っていたのですが、uwsgiで動かす方が良さそう。
Ruby on Rails
http://rubyonrails.org/
nginx + unicorn(5.2.0) + Ruby(2.3.1) + rails(5.0.0.1)でも、
同様のことをやってみました。
開発時にフレームワークとして重要な「Railsという共通認識」が強力でしょうから、ゲーム業界でも採用されるケースが多いのだと思いますが、
どうも個人的にUnicornは時々何かに引っかかる(動作速度が不安定?)事が多い体感がしまして・・・
多分技術力不足か知識不足なんだと思うので、どなたか色々教えてください!
再度、結果
Framework | Req/Sec |
---|---|
Phalcon:3.0.2 | 844.066 |
django: 1.10.4 | 665.386 |
rails-5.0.0.1 | 262.896 |
まぁ、あんまり意味がない数字なんですよね・・・。
いつか生きた数字が取りたいものです。