From df76a062fa93899a614194a34f7b7c281f9dbac5 Mon Sep 17 00:00:00 2001 From: Matt Mastracci Date: Tue, 6 Jun 2023 07:58:18 -0600 Subject: perf(ext/websocket): Make send sync for non-stream websockets (#19376) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit No need to go through the async machinery for `send(String | Buffer)` -- we can fire and forget, and then route any send errors into the async call we're already making (`op_ws_next_event`). Early benchmark on MacOS: Before: 155.8k msg/sec After: 166.2k msg/sec (+6.6%) Co-authored-by: Bartek IwaƄczuk --- ext/websocket/02_websocketstream.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) (limited to 'ext/websocket/02_websocketstream.js') diff --git a/ext/websocket/02_websocketstream.js b/ext/websocket/02_websocketstream.js index 00d5bdaec..be1001eb6 100644 --- a/ext/websocket/02_websocketstream.js +++ b/ext/websocket/02_websocketstream.js @@ -34,8 +34,8 @@ const { Uint8ArrayPrototype, } = primordials; const { - op_ws_send_text, - op_ws_send_binary, + op_ws_send_text_async, + op_ws_send_binary_async, op_ws_next_event, op_ws_create, op_ws_close, @@ -210,11 +210,11 @@ class WebSocketStream { const writable = new WritableStream({ write: async (chunk) => { if (typeof chunk === "string") { - await op_ws_send_text(this[_rid], chunk); + await op_ws_send_text_async(this[_rid], chunk); } else if ( ObjectPrototypeIsPrototypeOf(Uint8ArrayPrototype, chunk) ) { - await op_ws_send_binary(this[_rid], chunk); + await op_ws_send_binary_async(this[_rid], chunk); } else { throw new TypeError( "A chunk may only be either a string or an Uint8Array", -- cgit v1.2.3