Add benchmark for nested routers

This commit is contained in:
Vic Demuzere 2021-10-21 21:07:16 +02:00
parent 1d6f120c9e
commit eb2073113f
No known key found for this signature in database
GPG Key ID: 5B9EA1616690CF94
2 changed files with 37 additions and 0 deletions

View File

@ -79,6 +79,10 @@ required-features = ["sessions"]
name = "router"
harness = false
[[bench]]
name = "nest"
harness = false
[[example]]
name = "cookies"
required-features = ["cookies"]

33
benches/nest.rs Normal file
View File

@ -0,0 +1,33 @@
use criterion::{black_box, criterion_group, criterion_main, Criterion};
use http_types::{Method, Request, Response, Url};
fn criterion_benchmark(c: &mut Criterion) {
let mut app = tide::new();
app.at("/x").get(|_| async { Ok("X") });
app.at("/x/y").get(|_| async { Ok("Y") });
app.at("/x/y/z").get(|_| async { Ok("Z") });
let route = Url::parse("https://example.com/x/y/z").unwrap();
let req = Request::new(Method::Get, route);
c.bench_function("plain", |b| {
b.iter(|| black_box(app.respond::<_, Response>(req.clone())));
});
let mut appz = tide::new();
appz.at("/z").get(|_| async { Ok("Z") });
let mut appy = tide::new();
appy.at("/y").nest(appz);
let mut appx = tide::new();
appx.at("/x").nest(appy);
let route = Url::parse("https://example.com/x/y/z").unwrap();
let req = Request::new(Method::Get, route);
c.bench_function("nested", |b| {
b.iter(|| black_box(appx.respond::<_, Response>(req.clone())));
});
}
criterion_group!(benches, criterion_benchmark);
criterion_main!(benches);