UNPKG

4.24 kBJavaScriptView Raw
1#!/usr/bin/env node
2
3var msgpack_node = try_require("msgpack");
4var msgpack_lite = try_require("../index");
5var msgpack_js = try_require("msgpack-js");
6var msgpack_js_v5 = try_require("msgpack-js-v5");
7var msgpack5 = try_require("msgpack5");
8var msgpack_unpack = try_require("msgpack-unpack");
9var msgpack_codec = try_require("msgpack.codec");
10var notepack = try_require("notepack");
11
12msgpack5 = msgpack5 && msgpack5();
13msgpack_codec = msgpack_codec && msgpack_codec.msgpack;
14
15var pkg = require("../package.json");
16var data = require("../test/example");
17var packed = msgpack_lite.encode(data);
18var expected = JSON.stringify(data);
19
20var argv = Array.prototype.slice.call(process.argv, 2);
21
22if (argv[0] === "-v") {
23 console.warn(pkg.name + " " + pkg.version);
24 process.exit(0);
25}
26
27var limit = 5;
28if (argv[0] - 0) limit = argv.shift() - 0;
29limit *= 1000;
30
31var COL1 = 57;
32var COL2 = 6;
33var COL3 = 5;
34var COL4 = 6;
35
36console.log(rpad("operation", COL1), "|", " op ", "|", " ms ", "|", " op/s ");
37console.log(rpad("", COL1, "-"), "|", lpad(":", COL2, "-"), "|", lpad(":", COL3, "-"), "|", lpad(":", COL4, "-"));
38
39var buf, obj;
40
41if (JSON) {
42 buf = bench('buf = Buffer(JSON.stringify(obj));', JSON_stringify, data);
43 obj = bench('obj = JSON.parse(buf);', JSON.parse, buf);
44 test(obj);
45}
46
47if (msgpack_lite) {
48 buf = bench('buf = require("msgpack-lite").encode(obj);', msgpack_lite.encode, data);
49 obj = bench('obj = require("msgpack-lite").decode(buf);', msgpack_lite.decode, packed);
50 test(obj);
51}
52
53if (msgpack_node) {
54 buf = bench('buf = require("msgpack").pack(obj);', msgpack_node.pack, data);
55 obj = bench('obj = require("msgpack").unpack(buf);', msgpack_node.unpack, buf);
56 test(obj);
57}
58
59if (msgpack_codec) {
60 buf = bench('buf = Buffer(require("msgpack.codec").msgpack.pack(obj));', msgpack_codec_pack, data);
61 obj = bench('obj = require("msgpack.codec").msgpack.unpack(buf);', msgpack_codec.unpack, buf);
62 test(obj);
63}
64
65if (msgpack_js_v5) {
66 buf = bench('buf = require("msgpack-js-v5").encode(obj);', msgpack_js_v5.encode, data);
67 obj = bench('obj = require("msgpack-js-v5").decode(buf);', msgpack_js_v5.decode, buf);
68 test(obj);
69}
70
71if (msgpack_js) {
72 buf = bench('buf = require("msgpack-js").encode(obj);', msgpack_js.encode, data);
73 obj = bench('obj = require("msgpack-js").decode(buf);', msgpack_js.decode, buf);
74 test(obj);
75}
76
77if (msgpack5) {
78 buf = bench('buf = require("msgpack5")().encode(obj);', msgpack5.encode, data);
79 obj = bench('obj = require("msgpack5")().decode(buf);', msgpack5.decode, buf);
80 test(obj);
81}
82
83if (notepack) {
84 buf = bench('buf = require("notepack").encode(obj);', notepack.encode, data);
85 obj = bench('obj = require("notepack").decode(buf);', notepack.decode, buf);
86 test(obj);
87}
88
89if (msgpack_unpack) {
90 obj = bench('obj = require("msgpack-unpack").decode(buf);', msgpack_unpack, packed);
91 test(obj);
92}
93
94function JSON_stringify(src) {
95 return Buffer(JSON.stringify(src));
96}
97
98function msgpack_codec_pack(data) {
99 return Buffer(msgpack_codec.pack(data));
100}
101
102function bench(name, func, src) {
103 if (argv.length) {
104 var match = argv.filter(function(grep) {
105 return (name.indexOf(grep) > -1);
106 });
107 if (!match.length) return SKIP;
108 }
109 var ret, duration;
110 var start = new Date() - 0;
111 var count = 0;
112 while (1) {
113 var end = new Date() - 0;
114 duration = end - start;
115 if (duration >= limit) break;
116 while ((++count) % 100) ret = func(src);
117 }
118 name = rpad(name, COL1);
119 var score = Math.floor(count / duration * 1000);
120 count = lpad(count, COL2);
121 duration = lpad(duration, COL3);
122 score = lpad(score, COL4);
123 console.log(name, "|", count, "|", duration, "|", score);
124 return ret;
125}
126
127function rpad(str, len, chr) {
128 if (!chr) chr = " ";
129 while (str.length < len) str += chr;
130 return str;
131}
132
133function lpad(str, len, chr) {
134 if (!chr) chr = " ";
135 str += "";
136 while (str.length < len) str = chr + str;
137 return str;
138}
139
140function test(actual) {
141 if (actual === SKIP) return;
142 actual = JSON.stringify(actual);
143 if (actual === expected) return;
144 console.warn("expected: " + expected);
145 console.warn("actual: " + actual);
146}
147
148function SKIP() {
149}
150
151function try_require(name) {
152 try {
153 return require(name);
154 } catch (e) {
155 // ignore
156 }
157}
\No newline at end of file