0
0
Fork 0
mirror of https://github.com/denoland/deno.git synced 2025-03-12 15:17:56 -04:00
deno/ext/http/Cargo.toml
Nathan Whitaker 69b59b2296
perf(http): instantiate generic functions in deno_http, increase opt-level for some more hyper deps (#28317)
results on my machine (Macbook pro w/ M3 Max)

canary (hello world):
```
❯ oha -c 125 -n 4000000 --no-tui --disable-compression http://localhost:8000
Summary:
  Success rate: 100.00%
  Total:        31.0160 secs
  Slowest:      0.0083 secs
  Fastest:      0.0005 secs
  Average:      0.0010 secs
  Requests/sec: 128965.6454

  Total data:   49.59 MiB
  Size/request: 13 B
  Size/sec:     1.60 MiB
```

this PR (hello world):
```
❯ oha -c 125 -n 4000000 --no-tui --disable-compression http://localhost:8000
Summary:
  Success rate: 100.00%
  Total:        28.4050 secs
  Slowest:      0.0085 secs
  Fastest:      0.0001 secs
  Average:      0.0009 secs
  Requests/sec: 140820.2060

  Total data:   49.59 MiB
  Size/request: 13 B
  Size/sec:     1.75 MiB
```

---

Two changes here:
- use `opt-level` 3 for some of hyper's deps, since profile overrides
are not transitive
- As noted in the [cargo
reference](https://doc.rust-lang.org/cargo/reference/profiles.html#overrides-and-generics)
generic functions _may_ be optimized at the opt-level of the
_instantiating_ crate, rather than the defining crate. So currently it's
possible that some of the functions in `deno_http` are being compiled at
a lower optimization level. This PR ensures the generics are
instantiated in `deno_http`, which theoretically should guarantee they
actually use opt-level 3.

To allow embedders to still provide a custom property extractor, I put
this behind a feature flag.
2025-02-27 10:07:11 -08:00

62 lines
1.5 KiB
TOML

# Copyright 2018-2025 the Deno authors. MIT license.
[package]
name = "deno_http"
version = "0.191.0"
authors.workspace = true
edition.workspace = true
license.workspace = true
readme = "README.md"
repository.workspace = true
description = "HTTP server implementation for Deno"
[features]
default = ["default_property_extractor"]
"__http_tracing" = []
default_property_extractor = []
[lib]
path = "lib.rs"
[[bench]]
name = "compressible"
harness = false
[dependencies]
async-compression = { workspace = true, features = ["tokio", "brotli", "gzip"] }
async-trait.workspace = true
base64.workspace = true
brotli.workspace = true
bytes.workspace = true
cache_control.workspace = true
deno_core.workspace = true
deno_error.workspace = true
deno_net.workspace = true
deno_telemetry.workspace = true
deno_websocket.workspace = true
flate2.workspace = true
http.workspace = true
http_v02.workspace = true
httparse.workspace = true
hyper.workspace = true
hyper-util.workspace = true
hyper_v014 = { workspace = true, features = ["server", "stream", "http1", "http2", "runtime"] }
itertools.workspace = true
memmem.workspace = true
mime.workspace = true
once_cell.workspace = true
percent-encoding.workspace = true
phf.workspace = true
pin-project.workspace = true
ring.workspace = true
scopeguard.workspace = true
serde.workspace = true
smallvec.workspace = true
thiserror.workspace = true
tokio.workspace = true
tokio-util = { workspace = true, features = ["io"] }
[dev-dependencies]
bencher.workspace = true
http-body-util.workspace = true
rand.workspace = true