2002 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2003 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2004 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2005 | 01 | 02 | 03 | 04 | 05 | 09 | 10 | 11 | 12 |
2006 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2007 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2008 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2009 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2010 | 01 | 02 | 03 | 04 | 05 | 07 | 08 | 09 | 10 | 11 | 12 |
2011 | 01 | 02 | 03 | 04 | 05 | 06 | 08 | 10 | 11 | 12 |
2012 | 01 | 02 | 05 |
2003 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2004 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2005 | 01 | 02 | 03 | 04 | 05 | 09 | 10 | 11 | 12 |
2006 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2007 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2008 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2009 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2010 | 01 | 02 | 03 | 04 | 05 | 07 | 08 | 09 | 10 | 11 | 12 |
2011 | 01 | 02 | 03 | 04 | 05 | 06 | 08 | 10 | 11 | 12 |
2012 | 01 | 02 | 05 |
2010/11/10 (水)
■[開発] JSONICのパフォーマンス向上はここらが限界 
「Jackson vs JSONIC、結果はJacksonの圧勝」に対向するため、数日に渡ってJSONICのパフォーマンスチューニングを行ってきましたが、ここらで限界というところまできてしまいました。jacksonに速度で負けている理由の大半は、IOのバッファリングにあるらしく、そこをちょっといじるだけでずいぶん速くなるというのが結論。バッファリングの問題であるということから想定される通り、速度差の一番の原因は、String型に出力する場合にはほとんど関係ないというのが残念なところ。
| - | Jackson | JSONIC | 速度比 |
|---|---|---|---|
| Map1000×List1000 | 502.6083 | 614.5989 | 1 : 1.22 |
| Map1000×List10000 | 4199.0609 | 8439.9083 | 1 : 2.01 |
| Map10000×List1000 | 4294.5540 | 6303.7775 | 1 : 1.47 |
| Map100×Object | 2.7032 | 0.6869 | 1 : 0.25 |
| Map1K×Object | 5.7042 | 3.8384 | 1 : 0.67 |
| Map10K×Object | 38.3262 | 50.9306 | 1 : 1.33 |
| Map100K×Object | 277.4243 | 395.4630 | 1 : 1.43 |
| List100×Object | 4.6443 | 3.4030 | 1 : 0.73 |
| List1K×Object | 5.7136 | 7.9831 | 1 : 1.40 |
| List10K×Object | 35.2560 | 46.1092 | 1 : 1.31 |
| List100K×Object | 260.0687 | 333.4722 | 1 : 1.28 |
まだまだ勝利には遠すぎるのですが、1.2〜1.5倍程度に収まっているのでまぁいいかという気になってます。というより、もはや最低限の記述しかしておらず、何が差を生んでるのかさっぱりわからない状況だったり。一応、上記版をJSONIC 1.2.5 ベータ2としてsourceforge.jpにアップロードしておきました。
http://sourceforge.jp/projects/jsonic/releases/
クラスに対する処理のディスパッチや文字列のエスケープ方法など他の場所も修正したので、全体的にパフォーマンスは向上しているはずなのですが、大量のオブジェクトを繰り返し使用する場合には意味があるくらいで、普通の使い方してる分には1、2%程度しか変わらない雰囲気。う〜む。
トラックバック - http://d.hatena.ne.jp/arn/20101110


jsonicに付属(というか)のWebServiceServletは、業務用として使用しても大丈夫なものでしょうか?それともサンプル実装でしょうか?
業務用と言っても、中小規模(ユーザ数100くらい)の社内システムですが。
できましたら、アドバイスをいただけますよう、よろしくお願いします。
別に使ってもらっても構わないですし、今のところ問題になったという話は聴いていませんが、OSSですのでそこら辺は自己責任ということで。
jsonic1.2.5のRPCServletにて、prototype.jsでは下記のような内容で正常に動作しますが、
var ajax = new Ajax.Request('rpc/service/employee.json', {
method: 'POST',
contentType: 'application/json',
postBody: JSON.stringify({
method: 'fetchById',
params: para, //Objectにidを設定してArrayに詰めたもの
id: (new Date()).getTime()
}),
onSuccess: ...
jqueryでは下記の内容でサーバが404を返します。
jQuery.ajax({
"url": "rpc/service/employee.json",
"type": "POST",
"datatype": "json",
"data": {
"method": "fetchById",
"params": para,
"id":(new Date()).getTime()
}
}, {success : ...
何が問題なのでしょうか?
jQueryには標準でJSON変換関数が用意されていないので、jquery.json.js プラグインと合わせて使うとよいでしょう。
data:の部分をご指摘いただいたjquery.json.jsのjQuery.toJSONを使用すること、および、dataTypeではなく、contentTypeにapplication/jsonを指定する、などを経て、期待どおりの動作が得られました。途中までjQuery1.5betaを使っていましたが、urlの渡し方が変わる?みたいで、1.4.4に戻すことで問題解決がより容易になりました。
ありがとうございました。