From 7908b7cf6217a0c2e54a18e454ec4d9dd70935f8 Mon Sep 17 00:00:00 2001 From: Daniel Imms <2193314+Tyriar@users.noreply.github.com> Date: Thu, 27 Oct 2022 22:30:46 -0700 Subject: [PATCH] Avoid GC pressure from server data buffer --- demo/server.js | 23 +++++++++++++---------- 1 file changed, 13 insertions(+), 10 deletions(-) diff --git a/demo/server.js b/demo/server.js index 201c8706..92b82e98 100644 --- a/demo/server.js +++ b/demo/server.js @@ -111,27 +111,30 @@ function startServer() { } // binary message buffering function bufferUtf8(socket, timeout, maxSize) { - let buffer = []; + const dataBuffer = new Uint8Array(maxSize); let sender = null; let length = 0; return (data) => { - buffer.push(data); - length += data.length; - if (length > maxSize || userInput) { - userInput = false; - socket.send(Buffer.concat(buffer, length)); - buffer = []; + function flush() { + socket.send(Buffer.from(dataBuffer.buffer, 0, length)); length = 0; if (sender) { clearTimeout(sender); sender = null; } + } + if (length + data.length > maxSize) { + flush(); + } + dataBuffer.set(data, length); + length += data.length; + if (length > maxSize || userInput) { + userInput = false; + flush(); } else if (!sender) { sender = setTimeout(() => { - socket.send(Buffer.concat(buffer, length)); - buffer = []; sender = null; - length = 0; + flush(); }, timeout); } };