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