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 ライブラリから不要と判断したためです。

今後は、

などを進めていけたらいいな、と思っております。