いろいろなたくらみの為に、DjangoとRhacoでパフォーマンスのチェック。
細かな実装は違うけど、WorkStyleはDjango版とRhaco版の両方があるので、ベンチにはちょうどいい。
実施はWorkStyleのタスク詳細表示ページを使用した(Django/Rhaco版共に3回のSQLを投げているはず)。
せっかくなのでJava版(velocity+struts+torque+derby)もやってみた。Java版は完全に違う実装になってしまっているし、DBもPostgreSQLじゃなくってderbyなので参考値。残るはRails版なんだけど?
結果は、下記の通り。むぅ
Rhaco作者からの要望により、ionCubeを入れて試してみた。確かに簡単に数割早くなる。
さらに、turck-mmcacheの後継であるEAcceleratorも試してみた。メモリのみ使用+スクリプト更新チェックしないの最速設定。Javaは抜いたね。
| フレームワーク | キャッシュ | リクエスト回数 | 同時アクセス | request/sec |
|---|---|---|---|---|
| Rhaco | off | 1000 | 10 | 5.69 |
| Django | off | 1000 | 10 | 20.17 |
| Rhaco | on | 1000 | 10 | 9.84 |
| Rhaco | on+ionCube | 1000 | 10 | 12.36 |
| Rhaco | on+EAccelerator | 1000 | 10 | 17.22 |
| Django | on | 1000 | 10 | 248.45 |
| Java | - | 1000 | 10 | 15.72 |
| Rhaco | off | 10000 | 100 | 5.75 |
| Django | off | 10000 | 100 | 18.98 |
| Rhaco | on | 10000 | 100 | 9.25 |
| Django | on | 10000 | 100 | 271.11 |
| Java | - | 10000 | 100 | 14.37 |
request/secって1秒間に発行されたリクエスト回数だよね?
随分おそいなぁrhaco。
キャッシュしたら2倍にはなるんだ。それでもJavaにすら負けるのかぁ・・・・。
memcashいれて、Zend Optimizerでもいれてメモリキャッシュ使いまくらないと駄目かなぁ・・
DBを使わない部分だけでの比較もしてみてほしいね。
2 by makoto
08:59 on
2006-04-15
req・・は1秒間に処理した回数だね。
ionCubeはphpの良さをあまり殺さず、しかも簡単にインストール&高速化できるのでマジでphp使う場合には必須だね。
一つのファイルでリクエストを受け付けるのがばからしいphpとしては、memcached使う場合は事前に設計して作り出さないとまずいね。
DBを使わない部分の比較はあまり意味がない(フレームワークのボトルネック切り分けには有効だろうけど)。
Javaが30倍速いってのは、きっと単純なループをさせた場合だろうから、気にしなくてイイと思う。
DBコネクション周りはJavaとかPythonは、DBだけ再起動されるとアプリがこけることがあるから、こけないphpのコネクション取得動作が多少遅くても思想の問題だからけちをつける所でもないしなぁ。
Rhacoで動作時にXMLを見てる所とかないよね?
フレームワークの内部ではセッタ・ゲッタ使わないとかもありかもしれない。
3 by lifree
10:38 on
2006-04-15
XMLって設定のXMLって事かな?
それなら使ってないけど、テンプレート作成時にはXML解析してるけど、まぁ一回だけか。
セッタ・ゲッタを使わないってのは理想なんだけど、PHP4の場合にメソッドにしてないと変数の存在が見えなかったりするから、どうしたもんかと。(初期化してないとクラス変数が見えない)
PHP5専用にしてしまえば、きっと少し早くなるとは思うけど、それじゃ思想とずれちゃうしね。
4 by makoto
10:57 on
2006-04-15
テンプレート作成時とかの初回コンパイル時間は何の問題にもならないから、あとのネックはphpの言語的な物かな?
EAcceleratorを使えば現実的な数字なんじゃないかな。
動作させたままWebインターフェースでキャッシュクリアとか出来るっぽいし、かなり速い。
(DjangoでPSYCOを使った場合の数字とかにも興味があるけど、wsgiモードで起動する元気がない。。phpのionCube並には効きそうな気がするんだけどね。)
http://www.thinkit.co.jp/free/compare/2/2/1.html
によると(無料会員制のサイトだけど)PHPはZend OptimizerをいれてもJAVAの30倍遅いらしい・・・。
DBだけにしても2倍、コネクション取得だけでいくと5倍遅いという結果になっている。
遅いのは分かってたけど、数字にされちゃうと悔しいなー。
1 by lifree
01:51 on
2006-04-15