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