While doing performance comparison between Node.js and Deno, I noticed that Deno performance gets affected when number of connections are increased http server serves around 25-40% less req/sec than that of Node.js.
GitHub repo: https://github.com/trivikr/node-deno-http-benchmarks
UPDATE: The updated load testing benchmarks are posted in https://github.com/denoland/deno/issues/6722#issuecomment-658771957
Click to expand
$ sw_vers
ProductName: Mac OS X
ProductVersion: 10.14.6
BuildVersion: 18G3020
$ sysctl -n machdep.cpu.brand_string
Intel(R) Core(TM) i7-5557U CPU @ 3.10GHz
$ deno --version
deno 1.1.3
v8 8.5.216
typescript 3.9.2
$ node --version
v14.5.0
$ autocannon --version
autocannon v5.0.1
node v14.5.0
Node.js v14.5.0

Deno v1.1.3

Node.js v14.5.0

Deno v1.1.3

So does Node.js. It just appears that performance drops off a bit quicker with Deno. We had hoped that a JS/TS based HTTP server was going to give us the performance we wanted, but that hasn't been achievable and it is on the roadmap to port it to Rust. (It is also the easiest way to get HTTP/2 and QUIC as well).
There are some HTTP benchmarks (https://deno.land/benchmarks) that are part of CI pipeline. A load test like this might be a good addition.
is on the roadmap to port HTTP server to Rust
Is there a link to this specific request on roadmap?
On quick search, I could find https://github.com/denoland/deno/issues/5625 which is referred from https://github.com/denoland/deno/issues/2473
Updated benchmarks on [email protected] with [email protected]
Also, the headers were updated to return the headers in deno in https://github.com/trivikr/node-deno-http-benchmarks/commit/43e181039a7f7dbc7ef960fc826dbdf33ef2e55f
Click to expand
$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 20.04 LTS
Release: 20.04
Codename: focal
$ lscpu | grep "Model name:" | sed -r 's/Model name:\s{1,}//g'
Intel(R) Core(TM) i5-8250U CPU @ 1.60GHz
$ deno --version
deno 1.2.0
v8 8.5.216
typescript 3.9.2
$ node -v
v14.5.0
$ autocannon -v
autocannon v5.0.1
node v14.5.0
Node.js 14.5.0
$ autocannon -c10 localhost:3000
Running 10s test @ http://localhost:3000
10 connections
โโโโโโโโโโโฌโโโโโโโฌโโโโโโโฌโโโโโโโโฌโโโโโโโฌโโโโโโโโโโฌโโโโโโโโโโฌโโโโโโโโโโโ
โ Stat โ 2.5% โ 50% โ 97.5% โ 99% โ Avg โ Stdev โ Max โ
โโโโโโโโโโโผโโโโโโโผโโโโโโโผโโโโโโโโผโโโโโโโผโโโโโโโโโโผโโโโโโโโโโผโโโโโโโโโโโค
โ Latency โ 0 ms โ 0 ms โ 0 ms โ 0 ms โ 0.01 ms โ 0.08 ms โ 10.99 ms โ
โโโโโโโโโโโดโโโโโโโดโโโโโโโดโโโโโโโโดโโโโโโโดโโโโโโโโโโดโโโโโโโโโโดโโโโโโโโโโโ
โโโโโโโโโโโโโฌโโโโโโโโโโฌโโโโโโโโโโฌโโโโโโโโโโฌโโโโโโโโโโฌโโโโโโโโโโฌโโโโโโโโโโฌโโโโโโโโโโ
โ Stat โ 1% โ 2.5% โ 50% โ 97.5% โ Avg โ Stdev โ Min โ
โโโโโโโโโโโโโผโโโโโโโโโโผโโโโโโโโโโผโโโโโโโโโโผโโโโโโโโโโผโโโโโโโโโโผโโโโโโโโโโผโโโโโโโโโโค
โ Req/Sec โ 32367 โ 32367 โ 44223 โ 45503 โ 43404 โ 3756.58 โ 32366 โ
โโโโโโโโโโโโโผโโโโโโโโโโผโโโโโโโโโโผโโโโโโโโโโผโโโโโโโโโโผโโโโโโโโโโผโโโโโโโโโโผโโโโโโโโโโค
โ Bytes/Sec โ 3.59 MB โ 3.59 MB โ 4.91 MB โ 5.05 MB โ 4.82 MB โ 417 kB โ 3.59 MB โ
โโโโโโโโโโโโโดโโโโโโโโโโดโโโโโโโโโโดโโโโโโโโโโดโโโโโโโโโโดโโโโโโโโโโดโโโโโโโโโโดโโโโโโโโโโ
Req/Bytes counts sampled once per second.
434k requests in 10.06s, 48.2 MB read
Deno 1.2.0
$ autocannon -c10 localhost:3000
Running 10s test @ http://localhost:3000
10 connections
โโโโโโโโโโโฌโโโโโโโฌโโโโโโโฌโโโโโโโโฌโโโโโโโฌโโโโโโโโโโฌโโโโโโโโโโฌโโโโโโโโโโโ
โ Stat โ 2.5% โ 50% โ 97.5% โ 99% โ Avg โ Stdev โ Max โ
โโโโโโโโโโโผโโโโโโโผโโโโโโโผโโโโโโโโผโโโโโโโผโโโโโโโโโโผโโโโโโโโโโผโโโโโโโโโโโค
โ Latency โ 0 ms โ 0 ms โ 0 ms โ 1 ms โ 0.02 ms โ 0.15 ms โ 10.95 ms โ
โโโโโโโโโโโดโโโโโโโดโโโโโโโดโโโโโโโโดโโโโโโโดโโโโโโโโโโดโโโโโโโโโโดโโโโโโโโโโโ
โโโโโโโโโโโโโฌโโโโโโโโโโฌโโโโโโโโโโฌโโโโโโโโโโฌโโโโโโโโโฌโโโโโโโโโโโฌโโโโโโโโโโฌโโโโโโโโโโ
โ Stat โ 1% โ 2.5% โ 50% โ 97.5% โ Avg โ Stdev โ Min โ
โโโโโโโโโโโโโผโโโโโโโโโโผโโโโโโโโโโผโโโโโโโโโโผโโโโโโโโโผโโโโโโโโโโโผโโโโโโโโโโผโโโโโโโโโโค
โ Req/Sec โ 19391 โ 19391 โ 27199 โ 30639 โ 26365.82 โ 3429.79 โ 19389 โ
โโโโโโโโโโโโโผโโโโโโโโโโผโโโโโโโโโโผโโโโโโโโโโผโโโโโโโโโผโโโโโโโโโโโผโโโโโโโโโโผโโโโโโโโโโค
โ Bytes/Sec โ 2.15 MB โ 2.15 MB โ 3.02 MB โ 3.4 MB โ 2.93 MB โ 381 kB โ 2.15 MB โ
โโโโโโโโโโโโโดโโโโโโโโโโดโโโโโโโโโโดโโโโโโโโโโดโโโโโโโโโดโโโโโโโโโโโดโโโโโโโโโโดโโโโโโโโโโ
Req/Bytes counts sampled once per second.
290k requests in 11.06s, 32.2 MB read
Node.js v14.5.0
autocannon -c100 localhost:3000
Running 10s test @ http://localhost:3000
100 connections
โโโโโโโโโโโฌโโโโโโโฌโโโโโโโฌโโโโโโโโฌโโโโโโโฌโโโโโโโโโโฌโโโโโโโโโโฌโโโโโโโโโโโ
โ Stat โ 2.5% โ 50% โ 97.5% โ 99% โ Avg โ Stdev โ Max โ
โโโโโโโโโโโผโโโโโโโผโโโโโโโผโโโโโโโโผโโโโโโโผโโโโโโโโโโผโโโโโโโโโโผโโโโโโโโโโโค
โ Latency โ 1 ms โ 2 ms โ 3 ms โ 4 ms โ 1.99 ms โ 0.75 ms โ 30.14 ms โ
โโโโโโโโโโโดโโโโโโโดโโโโโโโดโโโโโโโโดโโโโโโโดโโโโโโโโโโดโโโโโโโโโโดโโโโโโโโโโโ
โโโโโโโโโโโโโฌโโโโโโโโโโฌโโโโโโโโโโฌโโโโโโโโโโฌโโโโโโโโโโฌโโโโโโโโโโฌโโโโโโโโโโฌโโโโโโโโโโ
โ Stat โ 1% โ 2.5% โ 50% โ 97.5% โ Avg โ Stdev โ Min โ
โโโโโโโโโโโโโผโโโโโโโโโโผโโโโโโโโโโผโโโโโโโโโโผโโโโโโโโโโผโโโโโโโโโโผโโโโโโโโโโผโโโโโโโโโโค
โ Req/Sec โ 34463 โ 34463 โ 46719 โ 47295 โ 45481.6 โ 3724.53 โ 34460 โ
โโโโโโโโโโโโโผโโโโโโโโโโผโโโโโโโโโโผโโโโโโโโโโผโโโโโโโโโโผโโโโโโโโโโผโโโโโโโโโโผโโโโโโโโโโค
โ Bytes/Sec โ 3.83 MB โ 3.83 MB โ 5.19 MB โ 5.25 MB โ 5.05 MB โ 413 kB โ 3.83 MB โ
โโโโโโโโโโโโโดโโโโโโโโโโดโโโโโโโโโโดโโโโโโโโโโดโโโโโโโโโโดโโโโโโโโโโดโโโโโโโโโโดโโโโโโโโโโ
Req/Bytes counts sampled once per second.
455k requests in 10.08s, 50.5 MB read
Deno v1.2.0
$ autocannon -c100 localhost:3000
Running 10s test @ http://localhost:3000
100 connections
โโโโโโโโโโโฌโโโโโโโฌโโโโโโโฌโโโโโโโโฌโโโโโโโฌโโโโโโโโโโฌโโโโโโโโโโฌโโโโโโโโโโโโ
โ Stat โ 2.5% โ 50% โ 97.5% โ 99% โ Avg โ Stdev โ Max โ
โโโโโโโโโโโผโโโโโโโผโโโโโโโผโโโโโโโโผโโโโโโโผโโโโโโโโโโผโโโโโโโโโโผโโโโโโโโโโโโค
โ Latency โ 2 ms โ 2 ms โ 4 ms โ 4 ms โ 2.28 ms โ 1.14 ms โ 104.55 ms โ
โโโโโโโโโโโดโโโโโโโดโโโโโโโดโโโโโโโโดโโโโโโโดโโโโโโโโโโดโโโโโโโโโโดโโโโโโโโโโโโ
โโโโโโโโโโโโโฌโโโโโโโโโโฌโโโโโโโโโโฌโโโโโโโโโโฌโโโโโโโโโโฌโโโโโโโโโโฌโโโโโโโโโโฌโโโโโโโโโโ
โ Stat โ 1% โ 2.5% โ 50% โ 97.5% โ Avg โ Stdev โ Min โ
โโโโโโโโโโโโโผโโโโโโโโโโผโโโโโโโโโโผโโโโโโโโโโผโโโโโโโโโโผโโโโโโโโโโผโโโโโโโโโโผโโโโโโโโโโค
โ Req/Sec โ 29887 โ 29887 โ 35839 โ 36319 โ 35258.4 โ 1814.32 โ 29881 โ
โโโโโโโโโโโโโผโโโโโโโโโโผโโโโโโโโโโผโโโโโโโโโโผโโโโโโโโโโผโโโโโโโโโโผโโโโโโโโโโผโโโโโโโโโโค
โ Bytes/Sec โ 3.32 MB โ 3.32 MB โ 3.98 MB โ 4.03 MB โ 3.91 MB โ 201 kB โ 3.32 MB โ
โโโโโโโโโโโโโดโโโโโโโโโโดโโโโโโโโโโดโโโโโโโโโโดโโโโโโโโโโดโโโโโโโโโโดโโโโโโโโโโดโโโโโโโโโโ
Req/Bytes counts sampled once per second.
353k requests in 10.08s, 39.1 MB read
Node.js v14.5.0
$ autocannon -c1000 localhost:3000
Running 10s test @ http://localhost:3000
1000 connections
โโโโโโโโโโโฌโโโโโโโโฌโโโโโโโโฌโโโโโโโโฌโโโโโโโโฌโโโโโโโโโโโฌโโโโโโโโโโโฌโโโโโโโโโโโโ
โ Stat โ 2.5% โ 50% โ 97.5% โ 99% โ Avg โ Stdev โ Max โ
โโโโโโโโโโโผโโโโโโโโผโโโโโโโโผโโโโโโโโผโโโโโโโโผโโโโโโโโโโโผโโโโโโโโโโโผโโโโโโโโโโโโค
โ Latency โ 22 ms โ 24 ms โ 31 ms โ 59 ms โ 25.54 ms โ 14.58 ms โ 311.06 ms โ
โโโโโโโโโโโดโโโโโโโโดโโโโโโโโดโโโโโโโโดโโโโโโโโดโโโโโโโโโโโดโโโโโโโโโโโดโโโโโโโโโโโโ
โโโโโโโโโโโโโฌโโโโโโโโโโฌโโโโโโโโโโฌโโโโโโโโโโฌโโโโโโโโโโฌโโโโโโโโโโฌโโโโโโโโโโฌโโโโโโโโโโ
โ Stat โ 1% โ 2.5% โ 50% โ 97.5% โ Avg โ Stdev โ Min โ
โโโโโโโโโโโโโผโโโโโโโโโโผโโโโโโโโโโผโโโโโโโโโโผโโโโโโโโโโผโโโโโโโโโโผโโโโโโโโโโผโโโโโโโโโโค
โ Req/Sec โ 22079 โ 22079 โ 40831 โ 41151 โ 38663.2 โ 5595.15 โ 22065 โ
โโโโโโโโโโโโโผโโโโโโโโโโผโโโโโโโโโโผโโโโโโโโโโผโโโโโโโโโโผโโโโโโโโโโผโโโโโโโโโโผโโโโโโโโโโค
โ Bytes/Sec โ 2.45 MB โ 2.45 MB โ 4.53 MB โ 4.57 MB โ 4.29 MB โ 621 kB โ 2.45 MB โ
โโโโโโโโโโโโโดโโโโโโโโโโดโโโโโโโโโโดโโโโโโโโโโดโโโโโโโโโโดโโโโโโโโโโดโโโโโโโโโโดโโโโโโโโโโ
Req/Bytes counts sampled once per second.
387k requests in 10.22s, 42.9 MB read
Deno v1.2.0
$ autocannon -c1000 localhost:3000
Running 10s test @ http://localhost:3000
1000 connections
โโโโโโโโโโโฌโโโโโโโโฌโโโโโโโโฌโโโโโโโโฌโโโโโโโโฌโโโโโโโโโโโฌโโโโโโโโโโโโฌโโโโโโโโโโโโโโ
โ Stat โ 2.5% โ 50% โ 97.5% โ 99% โ Avg โ Stdev โ Max โ
โโโโโโโโโโโผโโโโโโโโผโโโโโโโโผโโโโโโโโผโโโโโโโโผโโโโโโโโโโโผโโโโโโโโโโโโผโโโโโโโโโโโโโโค
โ Latency โ 14 ms โ 31 ms โ 42 ms โ 43 ms โ 39.78 ms โ 239.53 ms โ 10013.98 ms โ
โโโโโโโโโโโดโโโโโโโโดโโโโโโโโดโโโโโโโโดโโโโโโโโดโโโโโโโโโโโดโโโโโโโโโโโโดโโโโโโโโโโโโโโ
โโโโโโโโโโโโโฌโโโโโโโโโโฌโโโโโโโโโโฌโโโโโโโโโโฌโโโโโโโโโโฌโโโโโโโโโโฌโโโโโโโโโฌโโโโโโโโโโ
โ Stat โ 1% โ 2.5% โ 50% โ 97.5% โ Avg โ Stdev โ Min โ
โโโโโโโโโโโโโผโโโโโโโโโโผโโโโโโโโโโผโโโโโโโโโโผโโโโโโโโโโผโโโโโโโโโโผโโโโโโโโโผโโโโโโโโโโค
โ Req/Sec โ 19151 โ 19151 โ 23839 โ 24703 โ 23235.2 โ 1612.2 โ 19139 โ
โโโโโโโโโโโโโผโโโโโโโโโโผโโโโโโโโโโผโโโโโโโโโโผโโโโโโโโโโผโโโโโโโโโโผโโโโโโโโโผโโโโโโโโโโค
โ Bytes/Sec โ 2.13 MB โ 2.13 MB โ 2.65 MB โ 2.74 MB โ 2.58 MB โ 179 kB โ 2.12 MB โ
โโโโโโโโโโโโโดโโโโโโโโโโดโโโโโโโโโโดโโโโโโโโโโดโโโโโโโโโโดโโโโโโโโโโดโโโโโโโโโดโโโโโโโโโโ
Req/Bytes counts sampled once per second.
232k requests in 10.23s, 25.8 MB read
69 errors (69 timeouts)
Closing as:
@trivikr @kitsonk We got any timelines/roadmap for http to be ported to Rust, can we also think about http2 when the port is due to happen, this seems to have been forgotten about also.
@narwy We have not started this work, but we likely will undertake this in the coming weeks/months. I have a specific plan of how to do it. ETA is 3 months.
@ry thanks for the update can't wait ๐ I think also the http3 draft has been released this month or something too, could be worth a read also.
I think also the http3 draft has been released this month or something too, could be worth a read also.
QUIC is in draft-29 and it's not standardized yet.
Details https://datatracker.ietf.org/doc/draft-ietf-quic-http/
Support for HTTP/2, HTTP/3 and QUIC is being tracked in https://github.com/denoland/deno/issues/3995
@narwy We have not started this work, but we likely will undertake this in the coming weeks/months. I have a specific plan of how to do it. ETA is 3 months.
@ry Is there an update on this ?
Most helpful comment
@narwy We have not started this work, but we likely will undertake this in the coming weeks/months. I have a specific plan of how to do it. ETA is 3 months.