Skip to content

Commit

Permalink
Buffer.concat has performance issue
Browse files Browse the repository at this point in the history
  • Loading branch information
wujjpp authored and Jens-G committed Apr 21, 2022
1 parent 625367f commit 0dc5298
Showing 1 changed file with 16 additions and 21 deletions.
37 changes: 16 additions & 21 deletions lib/nodejs/lib/thrift/framed_transport.js
Original file line number Diff line number Diff line change
Expand Up @@ -34,36 +34,31 @@ function TFramedTransport(buffer, callback) {
TFramedTransport.prototype = new THeaderTransport();

TFramedTransport.receiver = function(callback, seqid) {
var residual = null;

var residual = [];
return function(data) {
// Prepend any residual data from our previous read
if (residual) {
data = Buffer.concat([residual, data]);
residual = null;
// push received data to residual
for(var i = 0; i < data.length; ++i) {
residual.push(data[i])
}

// framed transport
while (data.length) {
if (data.length < 4) {
// Not enough bytes to continue, save and resume on next packet
residual = data;
while (residual.length > 0) {
if (residual.length < 4) {
// Not enough bytes to continue, save and resume on next packet
return;
}
var frameSize = binary.readI32(data, 0);
if (data.length < 4 + frameSize) {
// Not enough bytes to continue, save and resume on next packet
residual = data;
// get single package sieze
var frameSize = binary.readI32(Buffer.from(residual.slice(0, 4)), 0);
// Not enough bytes to continue, save and resume on next packet
if (residual.length < 4 + frameSize) {
return;
}

var frame = data.slice(4, 4 + frameSize);
residual = data.slice(4 + frameSize);

// splice first 4 bytes
residual.splice(0, 4)
// get package data
var frame = Buffer.from(residual.splice(0, frameSize));
callback(new TFramedTransport(frame), seqid);

data = residual;
residual = null;
}
};
};
Expand Down

0 comments on commit 0dc5298

Please sign in to comment.