mirror of
https://github.com/rwf2/Rocket.git
synced 2024-12-31 23:02:37 +00:00
2465e2f136
In summary, this commit modifies 'Responder' so that: * ..it is no longer 'async'. To accommodate, the 'sized_body' methods in 'Response' and 'ResponseBuilder' are no longer 'async' and accept an optional size directly. If none is supplied, Rocket will attempt to compute the size, by seeking, before writing out the response. The 'Body' type was also changed to differentiate between its sized 'Seek' and chunked body variants. * ..'&Request' gains a lifetime: 'r, and the returned 'Response' is parameterized by a new 'o: 'r. This allows responders to return references from the request or those that live longer.
134 lines
3.5 KiB
Rust
134 lines
3.5 KiB
Rust
#![feature(test)]
|
|
#![feature(proc_macro_hygiene)]
|
|
|
|
#[macro_use] extern crate rocket;
|
|
|
|
use rocket::config::{Environment, Config, LoggingLevel};
|
|
use rocket::http::RawStr;
|
|
|
|
#[get("/")]
|
|
fn hello_world() -> &'static str { "Hello, world!" }
|
|
|
|
#[get("/")]
|
|
fn get_index() -> &'static str { "index" }
|
|
|
|
#[put("/")]
|
|
fn put_index() -> &'static str { "index" }
|
|
|
|
#[post("/")]
|
|
fn post_index() -> &'static str { "index" }
|
|
|
|
#[get("/a")]
|
|
fn index_a() -> &'static str { "index" }
|
|
|
|
#[get("/b")]
|
|
fn index_b() -> &'static str { "index" }
|
|
|
|
#[get("/c")]
|
|
fn index_c() -> &'static str { "index" }
|
|
|
|
#[get("/<_a>")]
|
|
fn index_dyn_a(_a: &RawStr) -> &'static str { "index" }
|
|
|
|
fn hello_world_rocket() -> rocket::Rocket {
|
|
let config = Config::build(Environment::Production).log_level(LoggingLevel::Off);
|
|
rocket::custom(config.unwrap()).mount("/", routes![hello_world])
|
|
}
|
|
|
|
fn rocket() -> rocket::Rocket {
|
|
let config = Config::build(Environment::Production).log_level(LoggingLevel::Off);
|
|
rocket::custom(config.unwrap())
|
|
.mount("/", routes![get_index, put_index, post_index, index_a,
|
|
index_b, index_c, index_dyn_a])
|
|
}
|
|
|
|
#[allow(unused_must_use)]
|
|
mod benches {
|
|
extern crate test;
|
|
|
|
use super::{hello_world_rocket, rocket};
|
|
use self::test::Bencher;
|
|
use rocket::local::Client;
|
|
|
|
fn client(_rocket: rocket::Rocket) -> Option<Client> {
|
|
unimplemented!("waiting for sync-client");
|
|
}
|
|
|
|
#[bench]
|
|
fn bench_hello_world(b: &mut Bencher) {
|
|
let client = client(hello_world_rocket()).unwrap();
|
|
let mut request = client.get("/");
|
|
|
|
b.iter(|| {
|
|
request.mut_dispatch();
|
|
});
|
|
}
|
|
|
|
#[bench]
|
|
fn bench_single_get_index(b: &mut Bencher) {
|
|
let client = client(rocket()).unwrap();
|
|
let mut request = client.get("/");
|
|
|
|
b.iter(|| {
|
|
request.mut_dispatch();
|
|
});
|
|
}
|
|
|
|
#[bench]
|
|
fn bench_get_put_post_index(b: &mut Bencher) {
|
|
let client = client(rocket()).unwrap();
|
|
|
|
// Hold all of the requests we're going to make during the benchmark.
|
|
let mut requests = vec![];
|
|
requests.push(client.get("/"));
|
|
requests.push(client.put("/"));
|
|
requests.push(client.post("/"));
|
|
|
|
b.iter(|| {
|
|
for request in requests.iter_mut() {
|
|
request.mut_dispatch();
|
|
}
|
|
});
|
|
}
|
|
|
|
#[bench]
|
|
fn bench_dynamic(b: &mut Bencher) {
|
|
let client = client(rocket()).unwrap();
|
|
|
|
// Hold all of the requests we're going to make during the benchmark.
|
|
let mut requests = vec![];
|
|
requests.push(client.get("/abc"));
|
|
requests.push(client.get("/abcdefg"));
|
|
requests.push(client.get("/123"));
|
|
|
|
b.iter(|| {
|
|
for request in requests.iter_mut() {
|
|
request.mut_dispatch();
|
|
}
|
|
});
|
|
}
|
|
|
|
#[bench]
|
|
fn bench_simple_routing(b: &mut Bencher) {
|
|
let client = client(rocket()).unwrap();
|
|
|
|
// Hold all of the requests we're going to make during the benchmark.
|
|
let mut requests = vec![];
|
|
for route in client.manifest().routes() {
|
|
let request = client.req(route.method, route.uri.path());
|
|
requests.push(request);
|
|
}
|
|
|
|
// A few more for the dynamic route.
|
|
requests.push(client.get("/abc"));
|
|
requests.push(client.get("/abcdefg"));
|
|
requests.push(client.get("/123"));
|
|
|
|
b.iter(|| {
|
|
for request in requests.iter_mut() {
|
|
request.mut_dispatch();
|
|
}
|
|
});
|
|
}
|
|
}
|