diff options
author | Brian White <mscdex@mscdex.net> | 2017-01-19 02:55:21 -0500 |
---|---|---|
committer | Luigi Pinca <luigipinca@gmail.com> | 2017-01-23 13:26:30 +0100 |
commit | 9fcd842279d8aee020c0a125db80641bb107ca36 (patch) | |
tree | c4c22f9d8f4297379028b6903b796a62df96e480 | |
parent | a57e2f2138c37e636e1f7684ab07cb36eea79716 (diff) | |
download | android-node-v8-9fcd842279d8aee020c0a125db80641bb107ca36.tar.gz android-node-v8-9fcd842279d8aee020c0a125db80641bb107ca36.tar.bz2 android-node-v8-9fcd842279d8aee020c0a125db80641bb107ca36.zip |
buffer: improve toJSON() performance
PR-URL: https://github.com/nodejs/node/pull/10895
Reviewed-By: Luigi Pinca <luigipinca@gmail.com>
Reviewed-By: Michal Zasso <targos@protonmail.com>
Reviewed-By: Evan Lucas <evanlucas@me.com>
Reviewed-By: Colin Ihrig <cjihrig@gmail.com>
Reviewed-By: James M Snell <jasnell@gmail.com>
-rw-r--r-- | benchmark/buffers/buffer-tojson.js | 18 | ||||
-rw-r--r-- | lib/buffer.js | 12 |
2 files changed, 26 insertions, 4 deletions
diff --git a/benchmark/buffers/buffer-tojson.js b/benchmark/buffers/buffer-tojson.js new file mode 100644 index 0000000000..1be59952c3 --- /dev/null +++ b/benchmark/buffers/buffer-tojson.js @@ -0,0 +1,18 @@ +'use strict'; + +const common = require('../common.js'); + +const bench = common.createBenchmark(main, { + n: [1e4], + len: [0, 10, 256, 4 * 1024] +}); + +function main(conf) { + var n = +conf.n; + var buf = Buffer.allocUnsafe(+conf.len); + + bench.start(); + for (var i = 0; i < n; ++i) + buf.toJSON(); + bench.end(n); +} diff --git a/lib/buffer.js b/lib/buffer.js index 875dc13ac3..cae036845f 100644 --- a/lib/buffer.js +++ b/lib/buffer.js @@ -804,10 +804,14 @@ Buffer.prototype.write = function(string, offset, length, encoding) { Buffer.prototype.toJSON = function() { - return { - type: 'Buffer', - data: Array.prototype.slice.call(this, 0) - }; + if (this.length) { + const data = []; + for (var i = 0; i < this.length; ++i) + data[i] = this[i]; + return { type: 'Buffer', data }; + } else { + return { type: 'Buffer', data: [] }; + } }; |