0
0
Fork 0
mirror of https://github.com/denoland/deno.git synced 2025-02-16 02:26:08 -05:00
denoland-deno/ext
Marcos Casagrande a8a7848c86 perf(ext/node): optimize http headers (#20163)
This PR optimizes Node's `IncomingMessageForServer.headers` by replacing
`Object.fromEntries()` with a loop and `headers.entries` with
`headersEntries` which returns the internal array directly instead of an
iterator

## Benchmarks

Using `wrk` with 5 headers

```
wrk -d 10s --latency -H "X-Deno: true" -H "Accept: application/json" -H "X-Foo: bar" -H "User-Agent: wrk" -H "Accept-Encoding: gzip, br" http://127.0.0.1:3000
```

**this PR**

```
Running 10s test @ http://127.0.0.1:3000
  2 threads and 10 connections
  Thread Stats   Avg      Stdev     Max   +/- Stdev
    Latency   167.53us  136.89us   2.75ms   97.33%
    Req/Sec    31.98k     1.38k   36.39k    70.30%
  Latency Distribution
     50%  134.00us
     75%  191.00us
     90%  234.00us
     99%  544.00us
  642548 requests in 10.10s, 45.96MB read
Requests/sec:  63620.36
Transfer/sec:      4.55MB
```

**main**

```
Running 10s test @ http://127.0.0.1:3000
  2 threads and 10 connections
  Thread Stats   Avg      Stdev     Max   +/- Stdev
    Latency   181.31us  132.54us   3.79ms   97.13%
    Req/Sec    29.21k     1.45k   32.93k    79.21%
  Latency Distribution
     50%  148.00us
     75%  198.00us
     90%  261.00us
     99%  545.00us
  586939 requests in 10.10s, 41.98MB read
Requests/sec:  58114.01
Transfer/sec:      4.16MB
```

```js
import express from "npm:express";

const app = express();
app.get("/", function (req, res) {
  req.headers;
  res.end();
});
app.listen(3000);
```
2023-08-21 17:00:44 +05:30
..
broadcast_channel 1.36.0 (#20036) 2023-08-03 18:26:25 +02:00
cache refactor(ext/cache): Remove custom shutdown and use fast async ops (#20107) 2023-08-09 17:45:35 +00:00
console 1.36.0 (#20036) 2023-08-03 18:26:25 +02:00
crypto 1.36.0 (#20036) 2023-08-03 18:26:25 +02:00
fetch perf(ext/node): optimize http headers (#20163) 2023-08-21 17:00:44 +05:30
ffi 1.36.0 (#20036) 2023-08-03 18:26:25 +02:00
fs chore: rename some helpers on the Fs trait (#20097) 2023-08-08 16:28:18 -04:00
http perf(http): use Cow<[u8]> for setting header (#20112) 2023-08-21 17:00:44 +05:30
io chore: deno_core -> 0.201.0 (#20135) 2023-08-21 17:00:44 +05:30
kv 1.36.0 (#20036) 2023-08-03 18:26:25 +02:00
napi 1.36.0 (#20036) 2023-08-03 18:26:25 +02:00
net fix(ext/net): implement a graceful error on an invalid SSL certificate (#20157) 2023-08-21 17:00:44 +05:30
node perf(ext/node): optimize http headers (#20163) 2023-08-21 17:00:44 +05:30
tls 1.36.0 (#20036) 2023-08-03 18:26:25 +02:00
url 1.36.0 (#20036) 2023-08-03 18:26:25 +02:00
web fix(ext/fetch): clone second branch chunks in Body.clone() (#20057) 2023-08-21 17:00:44 +05:30
webidl 1.36.0 (#20036) 2023-08-03 18:26:25 +02:00
websocket chore: upgrade fastwebsockets to 0.4.4 (#19089) 2023-08-10 09:59:06 +05:30
webstorage 1.36.0 (#20036) 2023-08-03 18:26:25 +02:00