Node.js
Fluentd
msgpack
MessagePack

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

More than 3 years have passed since last update.

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 の状況による)