Navigation Menu

Skip to content

Instantly share code, notes, and snippets.

@rklaehn
Created October 8, 2018 18:09
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save rklaehn/ba52f94896788a67107e3d38fc37a498 to your computer and use it in GitHub Desktop.
Save rklaehn/ba52f94896788a67107e3d38fc37a498 to your computer and use it in GitHub Desktop.
let msgpackLite = require('msgpack-lite');
let borc = require('borc');
let _ = require('lodash');
let { performance } = require('perf_hooks')
let arrays = _.times(100, (n) => {
return _.times(n, i => ({ i, a: [String(i * 1234), String(i * 1234), String(i * 1234), String(i * 1234)] }))
});
let encodedBORC = arrays.map(array => borc.encode(array));
let encodedMSGPACK = arrays.map(array => msgpackLite.encode(array));
let encodedJSON = arrays.map(array => JSON.stringify(array));
function measureEncode(name, codec, print) {
let t0 = performance.now();
for (let i = 0; i < 1000; i++) {
for (let array of arrays) {
codec(array);
}
}
let t1 = performance.now();
if (print) {
console.log(name, t1 - t0);
}
}
function measureDecode(name, codec, encodedArrays, print) {
let t0 = performance.now();
for (let i = 0; i < 10; i++) {
for (let array of encodedArrays) {
codec(array);
}
}
let t1 = performance.now();
if (print) {
console.log(name, t1 - t0);
}
}
const decoder = new borc.Decoder()
const borcDecodeFirst = (buffer) => decoder.decodeFirst(buffer)
console.log("= Encoding Time (ms) =");
// Warm up
measureEncode('msgp.encode ', msgpackLite.encode, false);
measureEncode('borc.encode ', borc.encode, false);
measureEncode('json.stringify', msgpackLite.encode, false);
// Test
measureEncode('msgp.encode ', msgpackLite.encode, true);
measureEncode('borc.encode ', borc.encode, true);
measureEncode('json.stringify', msgpackLite.encode, true);
console.log("\n= Decoding Time (ms) =");
// Warm up
measureDecode('msgp.decode ', msgpackLite.decode, encodedMSGPACK, false);
measureDecode('borc.decodeFirst', borcDecodeFirst, encodedBORC, false);
measureDecode('json.parse ', JSON.parse, encodedJSON, false);
// Test
measureDecode('msgp.decode ', msgpackLite.decode, encodedMSGPACK, true);
measureDecode('borc.decodeFirst', borcDecodeFirst, encodedBORC, true);
measureDecode('json.parse ', JSON.parse, encodedJSON, true);
console.log("\n= Efficiency =");
console.log(_.mean(_.zip(encodedBORC, encodedMSGPACK).map(t => t[0].length - t[1].length)));
console.log('CBOR total bytes', _.sum(encodedBORC.map(x => x.length)));
console.log('MSGPACK total bytes', _.sum(encodedMSGPACK.map(x => x.length)));
Before
$ node benchmark2.js
= Encoding Time (ms) =
msgp.encode 8863.595876000822
borc.encode 19132.6491599977
json.stringify 8959.81700899452
= Decoding Time (ms) =
msgp.decode 119.81795600056648
borc.decodeFirst 417.201666995883
json.parse 44.20244599878788
After
$ node benchmark2.js
= Encoding Time (ms) =
msgp.encode 8710.264702998102
borc.encode 18425.114222995937
json.stringify 8838.86964199692
= Decoding Time (ms) =
msgp.decode 114.59050000458956
borc.decodeFirst 54.20915900170803
json.parse 32.34785000234842
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment