Frameworks Round 2 に ASP.NET系を含めてみたい

@neuecc さんのツイートの「Cakeは…」から辿った Frameworks Round 2 – TechEmpower Blog を眺めてみていくつかメモ。

http://www.techempower.com/blog/images/article/framework-benchmarks-round2/json-i7.png

正直「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 はチェックしたい。

カテゴリー: 開発 パーマリンク

Frameworks Round 2 に ASP.NET系を含めてみたい への3件のフィードバック

  1. k1496 のコメント:

    ActiveRecordはあれですね、Model::find_by( $id )とかを使えるようにしたデザイン・パターンらしいです。
    スクリプト・フレームワークは上のクラスでDB接続を構成しているはずなので、コネクションは実装依存なんでしょうか。

    • masuda のコメント:

      調べると ORM の一種みたいですね。MVC が出てくる以前、発端は DI コンテナとかそのあたりでしょうか?初期のCakePHP から間が抜けているので、このあたりは全く追えていません。MVC としての Struts は終了ぎみなんですね、とか。

  2. エルメス ベルト のコメント:

    上質なコットン×シルク素材を使用した柔らかく透け感のあるストールでございます。ブラウンをメインカラーにパープルやブルー、バラモチーフのオレンジカラーが映えるシックでエレガントな印象?エルメスらしい馬やバラをモチーフにした絵柄となっております。首にサッと巻いて頂くだけで、高級感のあるワンランク上のオシャレを楽しんで頂けます。

コメントは停止中です。