68 lines
1.3 KiB
Rust
68 lines
1.3 KiB
Rust
#![feature(test)]
|
|
|
|
extern crate test;
|
|
|
|
use askama::Template;
|
|
|
|
#[derive(Template)]
|
|
#[template(
|
|
source = r#"
|
|
<html>
|
|
<head>
|
|
<title>{{year}}</title>
|
|
</head>
|
|
<body>
|
|
<h1>CSL {{year}}</h1>
|
|
<ul>
|
|
{% for team in teams %}
|
|
<li class="{% if loop.index == 1 %}champion{% endif %}">
|
|
<b>{{team.name}}</b>: {{team.score}}
|
|
</li>
|
|
{% endfor %}
|
|
</ul>
|
|
</body>
|
|
</html>"#,
|
|
ext = "html"
|
|
)]
|
|
|
|
struct BenchTemplate {
|
|
year: &'static str,
|
|
teams: Vec<Entry>,
|
|
}
|
|
|
|
struct Entry {
|
|
name: &'static str,
|
|
score: u16,
|
|
}
|
|
|
|
#[bench]
|
|
fn render_template(b: &mut test::Bencher) {
|
|
let teams = vec![
|
|
Entry {
|
|
name: "Jiangsu",
|
|
score: 43,
|
|
},
|
|
Entry {
|
|
name: "Beijing",
|
|
score: 27,
|
|
},
|
|
Entry {
|
|
name: "Guangzhou",
|
|
score: 22,
|
|
},
|
|
Entry {
|
|
name: "Shandong",
|
|
score: 12,
|
|
},
|
|
];
|
|
let hello = test::black_box(BenchTemplate {
|
|
year: "2015",
|
|
teams,
|
|
});
|
|
b.iter(|| {
|
|
// Instead of simply call hello.render().unwrap(), rendering to
|
|
// a string with a good capacity gives a ~10% speed increase here
|
|
let mut s = String::with_capacity(500);
|
|
hello.render_into(&mut s).unwrap();
|
|
});
|
|
}
|