summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDivy Srivastava <dj.srivastava23@gmail.com>2023-07-07 09:09:25 +0530
committerGitHub <noreply@github.com>2023-07-07 09:09:25 +0530
commit75d2c045f79aee4f772cb235860e6ef340177a05 (patch)
treeaf410764bb2f78ccb668c029c4b17c3901aaceea
parent679a0c428c2aeebdd5c23141d3653b8fbb9c41fc (diff)
perf(ext/websocket): optimize server websocket js (#19719)
Split from https://github.com/denoland/deno/pull/19686 - timestamp set to 0 for server websocket events. - take fast call path with op_ws_send_binary.
-rw-r--r--ext/web/02_event.js2
-rw-r--r--ext/websocket/01_websocket.js11
-rw-r--r--ext/websocket/lib.rs2
3 files changed, 8 insertions, 7 deletions
diff --git a/ext/web/02_event.js b/ext/web/02_event.js
index 7ccae1787..859da2121 100644
--- a/ext/web/02_event.js
+++ b/ext/web/02_event.js
@@ -200,7 +200,7 @@ class Event {
currentTarget: null,
eventPhase: Event.NONE,
target: null,
- timeStamp: DateNow(),
+ timeStamp: 0,
};
// TODO(@littledivy): Not spec compliant but performance is hurt badly
// for users of `_skipInternalInit`.
diff --git a/ext/websocket/01_websocket.js b/ext/websocket/01_websocket.js
index 50e110444..635979174 100644
--- a/ext/websocket/01_websocket.js
+++ b/ext/websocket/01_websocket.js
@@ -322,7 +322,12 @@ class WebSocket extends EventTarget {
throw new DOMException("readyState not OPEN", "InvalidStateError");
}
- if (ObjectPrototypeIsPrototypeOf(BlobPrototype, data)) {
+ if (ArrayBufferIsView(data)) {
+ op_ws_send_binary(this[_rid], data);
+ } else if (ObjectPrototypeIsPrototypeOf(ArrayBufferPrototype, data)) {
+ // deno-lint-ignore prefer-primordials
+ op_ws_send_binary(this[_rid], new Uint8Array(data));
+ } else if (ObjectPrototypeIsPrototypeOf(BlobPrototype, data)) {
PromisePrototypeThen(
// deno-lint-ignore prefer-primordials
data.slice().arrayBuffer(),
@@ -332,10 +337,6 @@ class WebSocket extends EventTarget {
new DataView(ab),
),
);
- } else if (ArrayBufferIsView(data)) {
- op_ws_send_binary(this[_rid], data);
- } else if (ObjectPrototypeIsPrototypeOf(ArrayBufferPrototype, data)) {
- op_ws_send_binary(this[_rid], data);
} else {
const string = String(data);
op_ws_send_text(
diff --git a/ext/websocket/lib.rs b/ext/websocket/lib.rs
index a8d18b4ad..5ac1f0197 100644
--- a/ext/websocket/lib.rs
+++ b/ext/websocket/lib.rs
@@ -407,7 +407,7 @@ pub fn ws_create_server_stream(
}
#[op(fast)]
-pub fn op_ws_send_binary(state: &mut OpState, rid: ResourceId, data: JsBuffer) {
+pub fn op_ws_send_binary(state: &mut OpState, rid: ResourceId, data: &[u8]) {
let resource = state.resource_table.get::<ServerWebSocket>(rid).unwrap();
let data = data.to_vec();
let len = data.len();