1
0
Fork 0
mirror of https://github.com/denoland/deno.git synced 2024-11-25 15:29:32 -05:00
denoland-deno/ext
Marcos Casagrande 627499177f perf(ext/event): optimize addEventListener options converter (#20203)
This PR optimizes `addEventListener` by replacing
`webidl.createDictionaryConverter("AddEventListenerOptions", ...)` with
a custom options parsing function to avoid the overhead of `webidl`
methods

**this PR**

```
cpu: 13th Gen Intel(R) Core(TM) i9-13900H
runtime: deno 1.36.1 (x86_64-unknown-linux-gnu)

benchmark                                           time (avg)        iter/s             (min … max)       p75       p99      p995
---------------------------------------------------------------------------------------------------- -----------------------------
addEventListener options converter (undefined)       4.87 ns/iter 205,248,660.8     (4.7 ns … 13.18 ns)   4.91 ns    5.4 ns    5.6 ns
addEventListener options converter (signal)         13.02 ns/iter  76,782,031.2   (11.74 ns … 18.84 ns)  13.08 ns  16.22 ns  16.57 ns
```

**main**
```
cpu: 13th Gen Intel(R) Core(TM) i9-13900H
runtime: deno 1.36.1 (x86_64-unknown-linux-gnu)

benchmark                                           time (avg)        iter/s             (min … max)       p75       p99      p995
---------------------------------------------------------------------------------------------------- -----------------------------
addEventListener options converter (undefined)     108.36 ns/iter   9,228,688.6  (103.5 ns … 129.88 ns) 109.69 ns 115.61 ns 125.28 ns
addEventListener options converter (signal)        134.03 ns/iter   7,460,878.1 (129.14 ns … 144.54 ns) 135.68 ns 141.13 ns  144.1 ns
```

```js
const tg = new EventTarget();
const signal = new AbortController().signal;

Deno.bench("addEventListener options converter (undefined)", () => {
  tg.addEventListener("foo", null); // null callback to only bench options converter
});

Deno.bench("addEventListener options converter (signal)", () => {
  tg.addEventListener("foo", null, { signal });
});
```

Towards https://github.com/denoland/deno/issues/20167
2023-08-21 18:23:28 +05:30
..
broadcast_channel 1.36.1 (#20221) 2023-08-21 18:08:38 +05:30
cache 1.36.1 (#20221) 2023-08-21 18:08:38 +05:30
console 1.36.1 (#20221) 2023-08-21 18:08:38 +05:30
crypto 1.36.1 (#20221) 2023-08-21 18:08:38 +05:30
fetch fix: release ReadeableStream in fetch (#17365) 2023-08-21 18:23:27 +05:30
ffi 1.36.1 (#20221) 2023-08-21 18:08:38 +05:30
fs 1.36.1 (#20221) 2023-08-21 18:08:38 +05:30
http feat(ext/web): resourceForReadableStream (#20180) 2023-08-21 18:23:27 +05:30
io chore: deno_core -> 0.201.0 (#20135) 2023-08-21 18:23:27 +05:30
kv feat(ext/kv): key expiration (#20091) 2023-08-21 18:23:27 +05:30
napi 1.36.1 (#20221) 2023-08-21 18:08:38 +05:30
net fix(ext/net): implement a graceful error on an invalid SSL certificate (#20157) 2023-08-21 18:23:27 +05:30
node fix(node/http): emit error when addr in use (#20200) 2023-08-21 18:23:27 +05:30
tls 1.36.1 (#20221) 2023-08-21 18:08:38 +05:30
url perf(ext/urlpattern): optimize URLPattern.exec (#20170) 2023-08-21 18:23:27 +05:30
web perf(ext/event): optimize addEventListener options converter (#20203) 2023-08-21 18:23:28 +05:30
webidl 1.36.1 (#20221) 2023-08-21 18:08:38 +05:30
websocket 1.36.1 (#20221) 2023-08-21 18:08:38 +05:30
webstorage 1.36.1 (#20221) 2023-08-21 18:08:38 +05:30