mirror of
https://github.com/askama-rs/askama.git
synced 2025-10-02 15:25:19 +00:00
137 lines
5.8 KiB
Rust
137 lines
5.8 KiB
Rust
extern crate askama;
|
|
#[macro_use]
|
|
extern crate criterion;
|
|
|
|
use askama::Template;
|
|
use criterion::Criterion;
|
|
|
|
criterion_main!(benches);
|
|
criterion_group!(benches, functions);
|
|
|
|
fn functions(c: &mut Criterion) {
|
|
c.bench_function("Big table", |b| big_table(b, &100));
|
|
c.bench_function("Teams", teams);
|
|
c.bench_function("Escaping", escaping);
|
|
}
|
|
|
|
fn big_table(b: &mut criterion::Bencher, size: &usize) {
|
|
let mut table = Vec::with_capacity(*size);
|
|
for _ in 0..*size {
|
|
let mut inner = Vec::with_capacity(*size);
|
|
for i in 0..*size {
|
|
inner.push(i);
|
|
}
|
|
table.push(inner);
|
|
}
|
|
let ctx = BigTable { table };
|
|
b.iter(|| ctx.render().unwrap());
|
|
}
|
|
|
|
#[derive(Template)]
|
|
#[template(path = "big-table.html")]
|
|
struct BigTable {
|
|
table: Vec<Vec<usize>>,
|
|
}
|
|
|
|
fn teams(b: &mut criterion::Bencher) {
|
|
let teams = Teams {
|
|
year: 2015,
|
|
teams: vec![
|
|
Team {
|
|
name: "Jiangsu".into(),
|
|
score: 43,
|
|
},
|
|
Team {
|
|
name: "Beijing".into(),
|
|
score: 27,
|
|
},
|
|
Team {
|
|
name: "Guangzhou".into(),
|
|
score: 22,
|
|
},
|
|
Team {
|
|
name: "Shandong".into(),
|
|
score: 12,
|
|
},
|
|
],
|
|
};
|
|
b.iter(|| teams.render().unwrap());
|
|
}
|
|
|
|
#[derive(Template)]
|
|
#[template(path = "teams.html")]
|
|
struct Teams {
|
|
year: u16,
|
|
teams: Vec<Team>,
|
|
}
|
|
|
|
struct Team {
|
|
name: String,
|
|
score: u8,
|
|
}
|
|
|
|
fn escaping(b: &mut criterion::Bencher) {
|
|
let string_long = r#"
|
|
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Mauris consequat tellus sit
|
|
amet ornare fermentum. Etiam nec erat ante. In at metus a orci mollis scelerisque.
|
|
Sed eget ultrices turpis, at sollicitudin erat. Integer hendrerit nec magna quis
|
|
venenatis. Vivamus non dolor hendrerit, vulputate velit sed, varius nunc. Quisque
|
|
in pharetra mi. Sed ullamcorper nibh malesuada commodo porttitor. Ut scelerisque
|
|
sodales felis quis dignissim. Morbi aliquam finibus justo, sit amet consectetur
|
|
mauris efficitur sit amet. Donec posuere turpis felis, eu lacinia magna accumsan
|
|
quis. Fusce egestas lacus vel fermentum tincidunt. Phasellus a nulla eget lectus
|
|
placerat commodo at eget nisl. Fusce cursus dui quis purus accumsan auctor.
|
|
Donec iaculis felis quis metus consectetur porttitor.
|
|
<p>
|
|
Etiam nibh mi, <b>accumsan</b> quis purus sed, posuere fermentum lorem. In pulvinar porta
|
|
maximus. Fusce tincidunt lacinia tellus sit amet tincidunt. Aliquam lacus est, pulvinar
|
|
non metus a, <b>facilisis</b> ultrices quam. Nulla feugiat leo in cursus eleifend. Suspendisse
|
|
eget nisi ac justo sagittis interdum id a ipsum. Nulla mauris justo, scelerisque ac
|
|
rutrum vitae, consequat vel ex.
|
|
</p></p></p></p></p></p></p></p></p></p></p></p></p></p></p></p></p></p></p></p></p></p></p></p>
|
|
<p>
|
|
Sed sollicitudin <b>sem</b> mauris, at rutrum nibh egestas vel. Ut eu nisi tellus. Praesent dignissim
|
|
orci elementum, mattis turpis eget, maximus ante. Suspendisse luctus eu felis a tempor. Morbi
|
|
ac risus vitae sem molestie ullamcorper. Curabitur ligula augue, sollicitudin quis maximus vel,
|
|
facilisis sed nibh. Aenean auctor magna sem, id rutrum metus convallis quis. Nullam non arcu
|
|
dictum, lobortis erat quis, rhoncus est. Suspendisse venenatis, mi sed venenatis vehicula,
|
|
tortor dolor egestas lectus, et efficitur turpis odio non augue. Integer velit sapien, dictum
|
|
non egestas vitae, hendrerit sed quam. Phasellus a nunc eu erat varius imperdiet. Etiam id
|
|
sollicitudin turpis, vitae molestie orci. Quisque ornare magna quis metus rhoncus commodo.
|
|
Phasellus non mauris velit.
|
|
</p>
|
|
<p>
|
|
Etiam dictum tellus ipsum, nec varius quam ornare vel. Cras vehicula diam nec sollicitudin
|
|
ultricies. Pellentesque rhoncus sagittis nisl id facilisis. Nunc viverra convallis risus ut
|
|
luctus. Aliquam vestibulum <b>efficitur massa</b>, id tempus nisi posuere a. Aliquam scelerisque
|
|
elit justo. Nullam a ante felis. Cras vitae lorem eu nisi feugiat hendrerit. Maecenas vitae
|
|
suscipit leo, lacinia dignissim lacus. Sed eget volutpat mi. In eu bibendum neque. Pellentesque
|
|
finibus velit a fermentum rhoncus. Maecenas leo purus, eleifend eu lacus a, condimentum sagittis
|
|
justo.
|
|
</p>"#;
|
|
let string_short = "Lorem ipsum dolor sit amet,<foo>bar&foo\"bar\\foo/bar";
|
|
let empty = "";
|
|
let no_escape = "Lorem ipsum dolor sit amet,";
|
|
let no_escape_long = r#"
|
|
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Proin scelerisque eu urna in aliquet.
|
|
Phasellus ac nulla a urna sagittis consequat id quis est. Nullam eu ex eget erat accumsan dictum
|
|
ac lobortis urna. Etiam fermentum ut quam at dignissim. Curabitur vestibulum luctus tellus, sit
|
|
amet lobortis augue tempor faucibus. Nullam sed felis eget odio elementum euismod in sit amet massa.
|
|
Vestibulum sagittis purus sit amet eros auctor, sit amet pharetra purus dapibus. Donec ornare metus
|
|
vel dictum porta. Etiam ut nisl nisi. Nullam rutrum porttitor mi. Donec aliquam ac ipsum eget
|
|
hendrerit. Cras faucibus, eros ut pharetra imperdiet, est tellus aliquet felis, eget convallis
|
|
lacus ipsum eget quam. Vivamus orci lorem, maximus ac mi eget, bibendum vulputate massa. In
|
|
vestibulum dui hendrerit, vestibulum lacus sit amet, posuere erat. Vivamus euismod massa diam,
|
|
vulputate euismod lectus vestibulum nec. Donec sit amet massa magna. Nunc ipsum nulla, euismod
|
|
quis lacus at, gravida maximus elit. Duis tristique, nisl nullam.
|
|
"#;
|
|
|
|
b.iter(|| {
|
|
format!("{}", ::askama::MarkupDisplay::from(string_long));
|
|
format!("{}", ::askama::MarkupDisplay::from(string_short));
|
|
format!("{}", ::askama::MarkupDisplay::from(empty));
|
|
format!("{}", ::askama::MarkupDisplay::from(no_escape));
|
|
format!("{}", ::askama::MarkupDisplay::from(no_escape_long));
|
|
});
|
|
}
|