mirror of https://github.com/fafhrd91/actix-web
add benchmark for full stack request lifecycle
This commit is contained in:
parent
3a5b62b550
commit
5b870c05b7
|
@ -99,6 +99,7 @@ env_logger = "0.6"
|
||||||
serde_derive = "1.0"
|
serde_derive = "1.0"
|
||||||
brotli2 = "0.3.2"
|
brotli2 = "0.3.2"
|
||||||
flate2 = "1.0.13"
|
flate2 = "1.0.13"
|
||||||
|
criterion = "0.3"
|
||||||
|
|
||||||
[profile.release]
|
[profile.release]
|
||||||
lto = true
|
lto = true
|
||||||
|
@ -116,3 +117,7 @@ actix-session = { path = "actix-session" }
|
||||||
actix-files = { path = "actix-files" }
|
actix-files = { path = "actix-files" }
|
||||||
actix-multipart = { path = "actix-multipart" }
|
actix-multipart = { path = "actix-multipart" }
|
||||||
awc = { path = "awc" }
|
awc = { path = "awc" }
|
||||||
|
|
||||||
|
[[bench]]
|
||||||
|
name = "server"
|
||||||
|
harness = false
|
|
@ -0,0 +1,66 @@
|
||||||
|
use actix_web::{web, test, App, HttpResponse};
|
||||||
|
use criterion::{criterion_group, criterion_main, Criterion};
|
||||||
|
use futures::future::join_all;
|
||||||
|
use awc::Client;
|
||||||
|
|
||||||
|
const STR: &str = "Hello World Hello World Hello World Hello World Hello World \
|
||||||
|
Hello World Hello World Hello World Hello World Hello World \
|
||||||
|
Hello World Hello World Hello World Hello World Hello World \
|
||||||
|
Hello World Hello World Hello World Hello World Hello World \
|
||||||
|
Hello World Hello World Hello World Hello World Hello World \
|
||||||
|
Hello World Hello World Hello World Hello World Hello World \
|
||||||
|
Hello World Hello World Hello World Hello World Hello World \
|
||||||
|
Hello World Hello World Hello World Hello World Hello World \
|
||||||
|
Hello World Hello World Hello World Hello World Hello World \
|
||||||
|
Hello World Hello World Hello World Hello World Hello World \
|
||||||
|
Hello World Hello World Hello World Hello World Hello World \
|
||||||
|
Hello World Hello World Hello World Hello World Hello World \
|
||||||
|
Hello World Hello World Hello World Hello World Hello World \
|
||||||
|
Hello World Hello World Hello World Hello World Hello World \
|
||||||
|
Hello World Hello World Hello World Hello World Hello World \
|
||||||
|
Hello World Hello World Hello World Hello World Hello World \
|
||||||
|
Hello World Hello World Hello World Hello World Hello World \
|
||||||
|
Hello World Hello World Hello World Hello World Hello World \
|
||||||
|
Hello World Hello World Hello World Hello World Hello World \
|
||||||
|
Hello World Hello World Hello World Hello World Hello World \
|
||||||
|
Hello World Hello World Hello World Hello World Hello World";
|
||||||
|
|
||||||
|
|
||||||
|
// benchmark sending all requests at the same time
|
||||||
|
fn bench_async_burst(c: &mut Criterion) {
|
||||||
|
let srv = test::start(|| {
|
||||||
|
App::new()
|
||||||
|
.service(web::resource("/").route(web::to(|| HttpResponse::Ok().body(STR))))
|
||||||
|
});
|
||||||
|
|
||||||
|
// We are using System here, since Runtime requires preinitialized tokio
|
||||||
|
// Maybe add to actix_rt docs
|
||||||
|
let url = srv.url("/");
|
||||||
|
let mut rt = actix_rt::System::new("test");
|
||||||
|
|
||||||
|
c.bench_function("get_body_async_burst", move |b|
|
||||||
|
b.iter_custom(|iters| {
|
||||||
|
|
||||||
|
let client = Client::new().get(url.clone()).freeze().unwrap();
|
||||||
|
|
||||||
|
let start = std::time::Instant::now();
|
||||||
|
// benchmark body
|
||||||
|
let resps = rt.block_on(async move {
|
||||||
|
let burst = (0..iters).map( |_| client.send() );
|
||||||
|
join_all( burst ).await
|
||||||
|
});
|
||||||
|
let elapsed = start.elapsed();
|
||||||
|
|
||||||
|
// if there are failed requests that might be an issue
|
||||||
|
let failed = resps.iter().filter(|r| r.is_err()).count();
|
||||||
|
if failed >0 {
|
||||||
|
eprintln!("failed {} requests (might be bench timeout)", failed);
|
||||||
|
};
|
||||||
|
|
||||||
|
elapsed
|
||||||
|
})
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
criterion_group!(server_benches, bench_async_burst);
|
||||||
|
criterion_main!(server_benches);
|
Loading…
Reference in New Issue