LoginSignup
63
60

More than 5 years have passed since last update.

msgpack-lite ピュアJavaScript実装の速いMessagePackライブラリ

Last updated at Posted at 2015-08-14

MessagePack のエンコード・デコードを行う Node.js 用の JavaScript のライブラリを公開しました。
エンコード処理は、C++ で書かれた msgpack ライブラリよりも速いです。(Node.js v0.10.40)
デコード処理も、他の Pure JavaScript のライブラリより速いです。

使い方

エンコード処理:(JSオブジェクトをBufferに変換)

var msgpack = require("msgpack-lite");
var buffer = msgpack.encode({"foo": "bar"}); // => 81 A3 66 6F 6F A3 62 61 72

デコード処理:(BufferをJSオブジェクトに変換)

var data = msgpack.decode(buffer); // => {"foo": "bar"}

上記のような1メッセージごとの変換に加えて、ストリーミングでの連続変換にも対応しています。

ベンチマーク

Node.js 用のいろいろなライブラリで、JS オブジェクトと Buffer を相互変換した結果です。
右端 op/s の値がスコアで、1秒あたりの変換処理数です。

operation result op/s
buf = Buffer(JSON.stringify(obj)); 225700op / 10001ms 2256
obj = JSON.parse(buf); 243000op / 10000ms 2430
buf = require("msgpack").pack(obj); 182000op / 10014ms 1817
obj = require("msgpack").unpack(buf); 232100op / 10004ms 2320
buf = require("msgpack-lite").encode(obj); 203300op / 10001ms 2032
obj = require("msgpack-lite").decode(buf); 145700op / 10003ms 1456
buf = Buffer(require("msgpack-javascript").msgpack.pack(obj)); 138400op / 10010ms 1382
obj = require("msgpack-javascript").msgpack.unpack(buf); 102000op / 10007ms 1019
buf = require("msgpack-js-v5").encode(obj); 28900op / 10032ms 288
obj = require("msgpack-js-v5").decode(buf); 99600op / 10008ms 995
buf = require("msgpack-js").encode(obj); 28700op / 10004ms 286
obj = require("msgpack-js").decode(buf); 104600op / 10012ms 1044
buf = require("msgpack5")().encode(obj); 4500op / 10025ms 44
obj = require("msgpack5")().decode(buf); 18600op / 10024ms 185
obj = require("msgpack-unpack").decode(buf); 1600op / 10245ms 15

このうち msgpack-javascript とは、本家レポジトリにある msgpack.codec.js のことです。

  • ベンチマーク環境:Node.js v0.10.40, AWS EC2 m3.medium, Amazon Linux AMI release 2015.03

備考

いちおう、デモできるように browserify 対応でブラウザでも動きますが、今のところ、ブラウザ上の処理速度は追いかけていないので、速いかどうかは分かりません。(buffer の状況による)

63
60
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
63
60