Skip to content

Commit 18db2af

Browse files
JacksonTianevanlucas
authored andcommitted
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: #4414 Reviewed-By: Trevor Norris <[email protected]> Reviewed-By: James M Snell <[email protected]>
1 parent ee83c95 commit 18db2af

File tree

2 files changed

+14
-5
lines changed

2 files changed

+14
-5
lines changed

benchmark/buffers/buffer_zero.js

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,16 +3,21 @@
33
const common = require('../common.js');
44

55
const bench = common.createBenchmark(main, {
6-
n: [1024]
6+
n: [1024],
7+
type: ['buffer', 'string']
78
});
89

9-
const zero = new Buffer(0);
10+
const zeroBuffer = Buffer.alloc(0);
11+
const zeroString = '';
1012

1113
function main(conf) {
1214
var n = +conf.n;
1315
bench.start();
14-
for (let i = 0; i < n * 1024; i++) {
15-
new Buffer(zero);
16-
}
16+
17+
if (conf.type === 'buffer')
18+
for (let i = 0; i < n * 1024; i++) Buffer.from(zeroBuffer);
19+
else if (conf.type === 'string')
20+
for (let i = 0; i < n * 1024; i++) Buffer.from(zeroString);
21+
1722
bench.end(n);
1823
}

lib/buffer.js

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -192,6 +192,10 @@ function fromString(string, encoding) {
192192
encoding = 'utf8';
193193

194194
var length = byteLength(string, encoding);
195+
196+
if (length === 0)
197+
return Buffer.alloc(0);
198+
195199
if (length >= (Buffer.poolSize >>> 1))
196200
return binding.createFromString(string, encoding);
197201

0 commit comments

Comments
 (0)