From 824cb485c542305d16e0b9dcfda0ce4a06cf5038 Mon Sep 17 00:00:00 2001 From: Divy Srivastava Date: Thu, 1 Dec 2022 06:35:32 -0800 Subject: perf(ext/websocket): skip Events constructor checks (#16365) WebSocket internal events can bypass Event's webidl checks and `ReflectDefineProperty` on the object value. Note, this intentionally makes websocket events `isTrusted` configurable (not spec-compliant) which hurts performance a lot. Before: ``` Msg/sec: 167627.750000 Msg/sec: 168239.250000 Msg/sec: 169690.000000 ``` After: ``` Msg/sec: 191065.500000 Msg/sec: 194745.250000 Msg/sec: 194746.000000 ``` --- ext/websocket/01_websocket.js | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) (limited to 'ext/websocket/01_websocket.js') diff --git a/ext/websocket/01_websocket.js b/ext/websocket/01_websocket.js index 2284a0e77..a30a74cad 100644 --- a/ext/websocket/01_websocket.js +++ b/ext/websocket/01_websocket.js @@ -10,8 +10,14 @@ const webidl = window.__bootstrap.webidl; const { HTTP_TOKEN_CODE_POINT_RE } = window.__bootstrap.infra; const { DOMException } = window.__bootstrap.domException; - const { Event, ErrorEvent, CloseEvent, MessageEvent, defineEventHandler } = - window.__bootstrap.event; + const { + Event, + ErrorEvent, + CloseEvent, + MessageEvent, + defineEventHandler, + _skipInternalInit, + } = window.__bootstrap.event; const { EventTarget } = window.__bootstrap.eventTarget; const { Blob, BlobPrototype } = globalThis.__bootstrap.file; const { @@ -440,6 +446,7 @@ const event = new MessageEvent("message", { data, origin: this[_url], + [_skipInternalInit]: true, }); this.dispatchEvent(event); break; -- cgit v1.2.3