DjangoとRhacoのベンチをWorkStyleで実施

2006/04/14 11:24

※ 商品のリンクをクリックして何かを購入すると私に少額の報酬が入ることがあります【広告表示】

いろいろなたくらみの為に、 DjangoRhaco でパフォーマンスのチェック。

細かな実装は違うけど、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

Rhacoのキャッシュはテンプレートのphpスクリプトへのコンパイル結果をキャッシュ。最速にするために更新チェック無し

Djangoのキャッシュはレスポンス自体をメモリ上にキャッシュ。最速のmemcachedは面倒なのでlocmem使用

RhacoのベンチにionCube使用版を追加。

ionCube は無料でダウンロード可能。php.iniでモジュールのパスを指定するだけで数割速くなる(配布時にコンパイル済みなのでglibc2のli nuxか限られたOS+php4限定)。かなり素敵。他の言語のようにバイトコードをメモリ上にキャッシュするので高速化される模様。

2006/04/15 01:51 by lifree
request/secって1秒間に発行されたリクエスト回数だよね?
随分おそいなぁrhaco。
キャッシュしたら2倍にはなるんだ。それでもJavaにすら負けるのかぁ・・・・。
memcashいれて、Zend Optimizerでもいれてメモリキャッシュ使いまくらないと駄目かなぁ・・
DBを使わない部分だけでの比較もしてみてほしいね。
2006/04/15 08:59 by makoto
req・・は1秒間に処理した回数だね。
ionCubeはphpの良さをあまり殺さず、しかも簡単にインストール&高速化できるのでマジでphp使う場合には必須だね。
一つのファイルでリクエストを受け付けるのがばからしいphpとしては、memcached使う場合は事前に設計して作り出さないとまずいね。
DBを使わない部分の比較はあまり意味がない(フレームワークのボトルネック切り分けには有効だろうけど)。
Javaが30倍速いってのは、きっと単純なループをさせた場合だろうから、気にしなくてイイと思う。
DBコネクション周りはJavaとかPythonは、DBだけ再起動されるとアプリがこけることがあるから、こけないphpのコネクション取得動作が多少遅くても思想の問題だからけちをつける所でもないしなぁ。
Rhacoで動作時にXMLを見てる所とかないよね?
フレームワークの内部ではセッタ・ゲッタ使わないとかもありかもしれない。
2006/04/15 10:38 by lifree
XMLって設定のXMLって事かな?
それなら使ってないけど、テンプレート作成時にはXML解析してるけど、まぁ一回だけか。
セッタ・ゲッタを使わないってのは理想なんだけど、PHP4の場合にメソッドにしてないと変数の存在が見えなかったりするから、どうしたもんかと。(初期化してないとクラス変数が見えない)
PHP5専用にしてしまえば、きっと少し早くなるとは思うけど、それじゃ思想とずれちゃうしね。
2006/04/15 10:57 by makoto
テンプレート作成時とかの初回コンパイル時間は何の問題にもならないから、あとのネックはphpの言語的な物かな?
EAcceleratorを使えば現実的な数字なんじゃないかな。
動作させたままWebインターフェースでキャッシュクリアとか出来るっぽいし、かなり速い。
(DjangoでPSYCOを使った場合の数字とかにも興味があるけど、wsgiモードで起動する元気がない。。phpのionCube並には効きそうな気がするんだけどね。)

Prev Entry

Next Entry