MessagePack-JS (2)
投稿時は、MessagePack-JS の結果の方が eval より高速としていましたが、それは ベンチマークテストのバグに由来するものでした。計測しなおしまして、記事を訂正しましたので下記を参照ください。
cuzic です。
MessagePack-JS ライブラリをちょっと更新しましたので、報告します。
主な変更点としては、以下のとおりです。
といったところです。
ベンチマーク結果ですが、以下のとおりとなり、eval の方が速いという結果になりました。 (Firefox なら 20倍以上遅い)
MessagePack | JSON | |
Firefox | 9,140msec | 380msec |
---|---|---|
Chrome | 6,883msec | 213msec |
Internet Explorer 8 でも検証したのですが、あまりに遅くて計測に耐えられる速度ではありませんでした。。。(1万行が長すぎたか・・・。
Internet Explorer 8でも計測しました。
MessagePack | JSON | |
Firefox | 9,140msec | 380msec |
---|---|---|
Chrome | 6,883msec | 213msec |
IE8 | 88,563msec | 2,422msec |
sort benchmarkで使われている gensort コマンドを使って
./gensort -a 10000 gensort.txt
でできた gensort.txt を元に生成した配列を 10回デコードするという処理にしました。
配列は、
[ [string_10_bytes_1 , string_32_bytes_1, string_52_bytes_1],
[string_10_bytes_2 , string_32_bytes_2, string_52_bytes_2],
[string_10_bytes_3 , string_32_bytes_3, string_52_bytes_3],
...
[string_10_bytes_10000 , string_32_bytes_10000, string_52_bytes_10000],
]
というようなかんじの文字列の配列の配列です。
JSON のデコードには単なる eval を利用しています。
MessagePack.load_url 関数を削除した理由は、Firefox 等でバイナリ文字列として処理するために必要な overrideMimeType を利用するには自分で実装するしかないかな、と思っていたのですが、Prototype.JS でも
new Ajax.Request(url, { method: 'get', onCreate: function(request, response){ if(request.transport.overrideMimeType){ request.transport.overrideMimeType("text/plain; charset=x-user-defined"); } }, onSuccess: function(transport) { // 処理したい内容 } });
とすることで利用可能であることが分かったので、MessagePack ライブラリから不要と判断したためです。
今後は、
などを進めていけたらいいな、と思っております。