diff options
author | Divy Srivastava <dj.srivastava23@gmail.com> | 2022-12-01 06:35:32 -0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-12-01 20:05:32 +0530 |
commit | 824cb485c542305d16e0b9dcfda0ce4a06cf5038 (patch) | |
tree | b85bdce59764246048a3d1f032c9137fa7347217 /ext/websocket/01_websocket.js | |
parent | 98d062e3dcd8804bd959ea41f6a0103ccd87f283 (diff) |
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
```
Diffstat (limited to 'ext/websocket/01_websocket.js')
-rw-r--r-- | ext/websocket/01_websocket.js | 11 |
1 files changed, 9 insertions, 2 deletions
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; |