diff options
Diffstat (limited to 'lib/_stream_readable.js')
-rw-r--r-- | lib/_stream_readable.js | 11 |
1 files changed, 9 insertions, 2 deletions
diff --git a/lib/_stream_readable.js b/lib/_stream_readable.js index 5b73646db8..754e45da64 100644 --- a/lib/_stream_readable.js +++ b/lib/_stream_readable.js @@ -256,7 +256,8 @@ function readableAddChunk(stream, chunk, encoding, addToFront) { } else if (state.objectMode || chunk && chunk.length > 0) { if (typeof chunk !== 'string' && !state.objectMode && - Object.getPrototypeOf(chunk) !== Buffer.prototype) { + // Do not use Object.getPrototypeOf as it is slower since V8 7.3. + !(chunk instanceof Buffer)) { chunk = Stream._uint8ArrayToBuffer(chunk); } @@ -399,7 +400,13 @@ function howMuchToRead(n, state) { // You can override either this method, or the async _read(n) below. Readable.prototype.read = function(n) { debug('read', n); - n = parseInt(n, 10); + // Same as parseInt(undefined, 10), however V8 7.3 performance regressed + // in this scenario, so we are doing it manually. + if (n === undefined) { + n = NaN; + } else if (!Number.isInteger(n)) { + n = parseInt(n, 10); + } const state = this._readableState; const nOrig = n; |