maud/benchmarks/benches/askama.rs
2020-09-27 21:36:27 +10:00

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();
});
}