Hatena::ブログ(Diary)

A.R.N [日記]

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 |

2010/11/10 (水)

[] JSONICパフォーマンス向上はここらが限界  JSONICのパフォーマンス向上はここらが限界を含むブックマーク

Jackson vs JSONIC、結果はJacksonの圧勝」に対向するため、数日に渡ってJSONICのパフォーマンスチューニングを行ってきましたが、ここらで限界というところまできてしまいました。jacksonに速度で負けている理由の大半は、IOのバッファリングにあるらしく、そこをちょっといじるだけでずいぶん速くなるというのが結論。バッファリングの問題であるということから想定される通り、速度差の一番の原因は、String型に出力する場合にはほとんど関係ないというのが残念なところ。

-JacksonJSONIC速度比
Map1000×List1000502.6083614.59891 : 1.22
Map1000×List100004199.06098439.90831 : 2.01
Map10000×List10004294.55406303.77751 : 1.47
Map100×Object2.70320.68691 : 0.25
Map1K×Object5.70423.83841 : 0.67
Map10K×Object38.326250.93061 : 1.33
Map100K×Object277.4243395.46301 : 1.43
List100×Object4.64433.40301 : 0.73
List1K×Object5.71367.98311 : 1.40
List10K×Object35.256046.10921 : 1.31
List100K×Object260.0687333.47221 : 1.28

まだまだ勝利には遠すぎるのですが、1.2〜1.5倍程度に収まっているのでまぁいいかという気になってます。というより、もはや最低限の記述しかしておらず、何が差を生んでるのかさっぱりわからない状況だったり。一応、上記版をJSONIC 1.2.5 ベータ2としてsourceforge.jpアップロードしておきました。

http://sourceforge.jp/projects/jsonic/releases/

クラスに対する処理のディスパッチや文字列エスケープ方法など他の場所も修正したので、全体的にパフォーマンスは向上しているはずなのですが、大量のオブジェクトを繰り返し使用する場合には意味があるくらいで、普通の使い方してる分には1、2%程度しか変わらない雰囲気。う〜む。

ダルビック有ダルビック有 2010/11/29 16:25 こんにちわ、いつも大変お世話になっております。
jsonicに付属(というか)のWebServiceServletは、業務用として使用しても大丈夫なものでしょうか?それともサンプル実装でしょうか?
業務用と言っても、中小規模(ユーザ数100くらい)の社内システムですが。
できましたら、アドバイスをいただけますよう、よろしくお願いします。

arnarn 2010/11/30 21:39 > WebServiceServletは、業務用として使用しても大丈夫なものでしょうか?

別に使ってもらっても構わないですし、今のところ問題になったという話は聴いていませんが、OSSですのでそこら辺は自己責任ということで。

evalerevaler 2011/01/27 17:10 arnさん、こんにちわ。
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 : ...

何が問題なのでしょうか?

arnarn 2011/01/27 23:54 jQuery.ajaxのdatatypeはサーバからの返信のデータタイプを指定するもので、dataをjsonに変換してくれるわけではないので、それが原因かな? と思います。
jQueryには標準でJSON変換関数が用意されていないので、jquery.json.js プラグインと合わせて使うとよいでしょう。

evalerevaler 2011/01/28 12:53 arnさん、アドバイスをありがとうございました。
data:の部分をご指摘いただいたjquery.json.jsのjQuery.toJSONを使用すること、および、dataTypeではなく、contentTypeにapplication/jsonを指定する、などを経て、期待どおりの動作が得られました。途中までjQuery1.5betaを使っていましたが、urlの渡し方が変わる?みたいで、1.4.4に戻すことで問題解決がより容易になりました。
ありがとうございました。

リフレ政策を発動せよ