buffer: improve equals() performance

PR-URL: https://github.com/nodejs/node/pull/29199
Reviewed-By: Michaël Zasso <targos@protonmail.com>
Reviewed-By: Ruben Bridgewater <ruben@bridgewater.de>
Reviewed-By: James M Snell <jasnell@gmail.com>
Reviewed-By: Yongsheng Zhang <zyszys98@gmail.com>
Reviewed-By: Luigi Pinca <luigipinca@gmail.com>
Reviewed-By: Trivikram Kamat <trivikr.dev@gmail.com>
Reviewed-By: Rich Trott <rtrott@gmail.com>
This commit is contained in:
Brian White 2019-08-19 01:43:29 -04:00 committed by Rich Trott
parent d937b029a9
commit f0c8898fb5
3 changed files with 28 additions and 1 deletions

View File

@ -0,0 +1,22 @@
'use strict';
const common = require('../common.js');
const bench = common.createBenchmark(main, {
size: [0, 512, 16386],
difflen: ['true', 'false'],
n: [1e6]
});
function main({ n, size, difflen }) {
const b0 = Buffer.alloc(size, 'a');
const b1 = Buffer.alloc(size + (difflen === 'true' ? 1 : 0), 'a');
if (b1.length > 0)
b1[b1.length - 1] = 'b'.charCodeAt(0);
bench.start();
for (let i = 0; i < n; i++) {
b0.equals(b1);
}
bench.end(n);
}

View File

@ -716,10 +716,14 @@ Buffer.prototype.equals = function equals(otherBuffer) {
throw new ERR_INVALID_ARG_TYPE(
'otherBuffer', ['Buffer', 'Uint8Array'], otherBuffer);
}
if (this === otherBuffer)
return true;
return _compare(this, otherBuffer) === 0;
if (this.byteLength !== otherBuffer.byteLength)
return false;
return this.byteLength === 0 || _compare(this, otherBuffer) === 0;
};
let INSPECT_MAX_BYTES = 50;

View File

@ -12,6 +12,7 @@ runBenchmark('buffers',
'bytes=0',
'byteLength=1',
'charsPerLine=6',
'difflen=false',
'encoding=utf8',
'endian=BE',
'len=256',