From 18db2aff783b457cfd995b826ac91a52650abb44 Mon Sep 17 00:00:00 2001 From: Jackson Tian Date: Fri, 18 Dec 2015 10:57:21 +0800 Subject: [PATCH] buffer: faster case for create buffer from empty string When create Buffer from empty string will touch C++ binding also. This patch can improve edge case ~70% faster. PR-URL: https://github.com/nodejs/node/pull/4414 Reviewed-By: Trevor Norris Reviewed-By: James M Snell --- benchmark/buffers/buffer_zero.js | 15 ++++++++++----- lib/buffer.js | 4 ++++ 2 files changed, 14 insertions(+), 5 deletions(-) diff --git a/benchmark/buffers/buffer_zero.js b/benchmark/buffers/buffer_zero.js index 461378758b5951..e624bbbcd43283 100644 --- a/benchmark/buffers/buffer_zero.js +++ b/benchmark/buffers/buffer_zero.js @@ -3,16 +3,21 @@ const common = require('../common.js'); const bench = common.createBenchmark(main, { - n: [1024] + n: [1024], + type: ['buffer', 'string'] }); -const zero = new Buffer(0); +const zeroBuffer = Buffer.alloc(0); +const zeroString = ''; function main(conf) { var n = +conf.n; bench.start(); - for (let i = 0; i < n * 1024; i++) { - new Buffer(zero); - } + + if (conf.type === 'buffer') + for (let i = 0; i < n * 1024; i++) Buffer.from(zeroBuffer); + else if (conf.type === 'string') + for (let i = 0; i < n * 1024; i++) Buffer.from(zeroString); + bench.end(n); } diff --git a/lib/buffer.js b/lib/buffer.js index 4c98c0cdb52ef0..ef7176367f31be 100644 --- a/lib/buffer.js +++ b/lib/buffer.js @@ -192,6 +192,10 @@ function fromString(string, encoding) { encoding = 'utf8'; var length = byteLength(string, encoding); + + if (length === 0) + return Buffer.alloc(0); + if (length >= (Buffer.poolSize >>> 1)) return binding.createFromString(string, encoding);