0
0
Fork 0
mirror of https://github.com/denoland/deno.git synced 2025-03-04 01:44:26 -05:00

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.
This commit is contained in:
Divy Srivastava 2023-07-07 09:09:25 +05:30 committed by GitHub
parent 679a0c428c
commit 75d2c045f7
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 8 additions and 7 deletions

View file

@ -200,7 +200,7 @@ class Event {
currentTarget: null, currentTarget: null,
eventPhase: Event.NONE, eventPhase: Event.NONE,
target: null, target: null,
timeStamp: DateNow(), timeStamp: 0,
}; };
// TODO(@littledivy): Not spec compliant but performance is hurt badly // TODO(@littledivy): Not spec compliant but performance is hurt badly
// for users of `_skipInternalInit`. // for users of `_skipInternalInit`.

View file

@ -322,7 +322,12 @@ class WebSocket extends EventTarget {
throw new DOMException("readyState not OPEN", "InvalidStateError"); 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( PromisePrototypeThen(
// deno-lint-ignore prefer-primordials // deno-lint-ignore prefer-primordials
data.slice().arrayBuffer(), data.slice().arrayBuffer(),
@ -332,10 +337,6 @@ class WebSocket extends EventTarget {
new DataView(ab), 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 { } else {
const string = String(data); const string = String(data);
op_ws_send_text( op_ws_send_text(

View file

@ -407,7 +407,7 @@ pub fn ws_create_server_stream(
} }
#[op(fast)] #[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 resource = state.resource_table.get::<ServerWebSocket>(rid).unwrap();
let data = data.to_vec(); let data = data.to_vec();
let len = data.len(); let len = data.len();