mirror of
https://github.com/fafhrd91/actix-web
synced 2025-06-26 06:57:43 +02:00
Add benchmark for full stack request lifecycle (#1298)
* add benchmark for full stack request lifecycle * add direct service benchmarks * fix newline * add cloneable service benchmarks * remove cloneable bench experiments + cargo fmt Co-authored-by: Yuki Okushi <huyuumi.dev@gmail.com>
This commit is contained in:
committed by
Yuki Okushi
parent
cf3577550c
commit
8888520d83
64
benches/server.rs
Normal file
64
benches/server.rs
Normal file
@ -0,0 +1,64 @@
|
||||
use actix_web::{test, web, App, HttpResponse};
|
||||
use awc::Client;
|
||||
use criterion::{criterion_group, criterion_main, Criterion};
|
||||
use futures::future::join_all;
|
||||
|
||||
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);
|
Reference in New Issue
Block a user