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