@neuecc さんのツイートの「Cakeは…」から辿った Frameworks Round 2 – TechEmpower Blog を眺めてみていくつかメモ。
正直「CakePHPがこんなに下位≒遅いなんて信じられない~」かつフレームワーク選定を考え直さないといけないなと思いつつ、が調べていった発端なので、ちょっと視点がずれているかもしれませんが。まあ、個人の感想ということで。
ちなみに、ベンチマークのソースコードは TechEmpower/FrameworkBenchmarks · GitHub でダウンロードできます。Issues · TechEmpower/FrameworkBenchmarks · GitHub を見ると、結構な量のコメントがあるので「釣り」としてうまく機能しているかなと。それぞれ、自分の使っているフレームワークを心理的に擁護したいので、続々とコメントが集まって来ています。そういう自分も釣られた一人。ただ、こういう絨毯爆撃的なベンチマークはあまりないので(Oracle にはベンチマークをしちゃダメという契約条項もあるし)さっくりと比較記事的に面白いし、相対的に色々なコードを眺めるきっかけになります。netty は前から知っていたのですが、こういう風に比較をすると Java コードであっても無視できないですよね~、とか。
では、30分ぐらいでざっと書き下します。以下、主に Database access test (multiple queries) を見て比較しています。
■ASP.NET 系が入っていない問題
意図的…というよりも、Amazon EC2 上と Ubuntu 上になるので、.NET 系が入っていません。mono で動かせば?というのがコメントとかにありましたが、ここはやっぱり IIS 上で再実験してみたいところです。気になるポイントは、
- netty 風に .net で非同期/単体サーバープログラムを作った場合どうなるのか?
- ASP.NET MVC がどの位置になるのか?
- ASP.NET Web API がどの位置になるのか?
リクエスト数の絶対値ではなくて、相対値を調べることになるので、PHP まわり、Ruby まわりも IIS 上で動かしてみる必要がありかと。xampp をインストールして、べたな状態で動かすのもありですね。java のほうは詳しくないので、Spring とか Hivernate とか動けばokかと。
■servlet-raw と php-raw がほぼ同じ
ソースコードを見ると php-raw と php の違いは、直接 PDO を使うか、ActiveRecord というライブラリを使うかの違いですかね?(ActiveRecordをよく知らない)。ActiveRecord は MVC っぽい作りなので、べたで作れば PDO を使うし(Wordpress は mysql_query を使うから遅いという話もあるし)ってことで、java の servlet と同じスピードが出るのであれば、さっくりと PHP で組むのもありかな?と思ったり。乱暴ですが。
ただし、フレームワークベンチな訳で、spring が servlet-raw よりもあまり遅くなっていないのはいいですよね。
■コネクションプーリングの問題
設定をみると CakePHP のコネクションプーリング?(persistent)の設定がoffになっているし、そもそも PHP って MySQL に対してプーリングができるのかどうかが怪しいし、そういう点ではコンパイル系の Java のほうがマルチコネクションに対しては断然有利です。今回のベンチマークのように、小さいクエリを何度もクライアントから発行する場合は、サーブレットで DB に接続する時間がほとんどを占めてしまうので、java と php では大きな差が出る可能が…と言いつつ、servlet-raw と php-raw の差があまりないので、そうでもないのかも。このあたりは自分で再実験をしてみたいところです。
■MVC の問題
MVC パターンを噛ますと、当然クラスロードやらなんやらで遅くなっていしまうのが当然で、このあたりは、CakePHP、Rails は不利ですよね。struts が入っていないのは意図的?最近は使われない?
なので、この中に ASP.NET MVC、ASP.NET Web API がどの位置になるのかが興味あるところです。MVC を入れるのは、瞬間的なパフォーマンスよりも、継続的プログラミングのパフォーマンスや、ローンチのパフォーマンスを上げたいってところが主なので、そこで実行時のパフォーマンスとのトレードオフがあっても然り。
■Apache と IIS の問題
Ubuntu なので、Apache を使っていますが、Windows Server にすれば、IIS+PHP+MySQL とか、IIS+PHP+SQL Serverとか、IIS+ASP.NET+SQL Server とか諸々の組み合わせがでてきます。フレームワークの比較からは外れますが、Windows Server 上で動かした場合(Azure 上で動かした場合)は、このフレームワークランキングって変わるのか?ってのが興味あるところです。
# ざっくりと、ASP.NET Web API はチェックしたい。
ActiveRecordはあれですね、Model::find_by( $id )とかを使えるようにしたデザイン・パターンらしいです。
スクリプト・フレームワークは上のクラスでDB接続を構成しているはずなので、コネクションは実装依存なんでしょうか。
調べると ORM の一種みたいですね。MVC が出てくる以前、発端は DI コンテナとかそのあたりでしょうか?初期のCakePHP から間が抜けているので、このあたりは全く追えていません。MVC としての Struts は終了ぎみなんですね、とか。
上質なコットン×シルク素材を使用した柔らかく透け感のあるストールでございます。ブラウンをメインカラーにパープルやブルー、バラモチーフのオレンジカラーが映えるシックでエレガントな印象?エルメスらしい馬やバラをモチーフにした絵柄となっております。首にサッと巻いて頂くだけで、高級感のあるワンランク上のオシャレを楽しんで頂けます。