diff --git a/benches/Cargo.lock b/benches/Cargo.lock index 04eb1c0..f53d82e 100644 --- a/benches/Cargo.lock +++ b/benches/Cargo.lock @@ -169,9 +169,9 @@ checksum = "b41b7ea54a0c9d92199de89e20e58d49f02f8e699814ef3fdf266f6f748d15c7" [[package]] name = "base64" -version = "0.12.1" +version = "0.12.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "53d1ccbaf7d9ec9537465a97bf19edc1a4e158ecb49fc16178202238c569cc42" +checksum = "e223af0dc48c96d4f8342ec01a4974f139df863896b316681efd36742f22cc67" [[package]] name = "beef" @@ -287,6 +287,12 @@ version = "1.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "08c48aae112d48ed9f069b33538ea9e3e90aa263cfa3d1c24309612b1f7472de" +[[package]] +name = "bytes" +version = "0.5.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "130aac562c0dd69c56b3b1cc8ffd2e17be31d0b6c25b61c96b76231aa23e39e1" + [[package]] name = "cast" version = "0.2.3" @@ -835,7 +841,7 @@ dependencies = [ [[package]] name = "handlebars" version = "3.1.1-alpha.0" -source = "git+https://github.com/sunng87/handlebars-rust#87b25985c4cd1a7babc78ccf28a592a44474c133" +source = "git+https://github.com/sunng87/handlebars-rust#3a5e50b24e471a1ea49c7a33dcfc89f68db385c4" dependencies = [ "log", "pest", @@ -1362,7 +1368,7 @@ version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7b336d94e8e4ce29bf15bba393164629764744c567e8ad306cc1fdd0119967fd" dependencies = [ - "base64 0.12.1", + "base64 0.12.2", "chrono", "indexmap", "line-wrap", @@ -1562,10 +1568,11 @@ dependencies = [ [[package]] name = "rayon" -version = "1.3.0" +version = "1.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "db6ce3297f9c85e16621bb8cca38a06779ffc31bb8184e1be4bed2be4678a098" +checksum = "62f02856753d04e03e26929f820d0a0a337ebe71f849801eea335d464b349080" dependencies = [ + "autocfg", "crossbeam-deque", "either", "rayon-core", @@ -1573,9 +1580,9 @@ dependencies = [ [[package]] name = "rayon-core" -version = "1.7.0" +version = "1.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08a89b46efaf957e52b18062fb2f4660f8b8a4dde1807ca002690868ef2c85a9" +checksum = "e92e15d89083484e11353891f1af602cc661426deb9564c298b270c726973280" dependencies = [ "crossbeam-deque", "crossbeam-queue", @@ -1642,7 +1649,7 @@ name = "ructe" version = "0.11.5-PRE" source = "git+https://github.com/kaj/ructe#0d8ffc1a4e920fc591f19c7fcc126825c3da8745" dependencies = [ - "base64 0.12.1", + "base64 0.12.2", "bytecount", "itertools 0.9.0", "md5", @@ -2323,8 +2330,9 @@ dependencies = [ [[package]] name = "yarte" version = "0.10.0" -source = "git+https://github.com/botika/yarte#7210239d274aced48e8f7c3466058784202eb941" +source = "git+https://github.com/botika/yarte#dbd1a379fc333e995bfc2c055761fea48f566808" dependencies = [ + "bytes", "yarte_derive", "yarte_helpers", ] @@ -2332,7 +2340,7 @@ dependencies = [ [[package]] name = "yarte_codegen" version = "0.10.0" -source = "git+https://github.com/botika/yarte#7210239d274aced48e8f7c3466058784202eb941" +source = "git+https://github.com/botika/yarte#dbd1a379fc333e995bfc2c055761fea48f566808" dependencies = [ "proc-macro2 1.0.18", "quote 1.0.7", @@ -2344,7 +2352,7 @@ dependencies = [ [[package]] name = "yarte_derive" version = "0.10.0" -source = "git+https://github.com/botika/yarte#7210239d274aced48e8f7c3466058784202eb941" +source = "git+https://github.com/botika/yarte#dbd1a379fc333e995bfc2c055761fea48f566808" dependencies = [ "prettyprint", "proc-macro2 1.0.18", @@ -2361,7 +2369,7 @@ dependencies = [ [[package]] name = "yarte_helpers" version = "0.10.0" -source = "git+https://github.com/botika/yarte#7210239d274aced48e8f7c3466058784202eb941" +source = "git+https://github.com/botika/yarte#dbd1a379fc333e995bfc2c055761fea48f566808" dependencies = [ "dtoa", "itoa", @@ -2373,7 +2381,7 @@ dependencies = [ [[package]] name = "yarte_hir" version = "0.10.0" -source = "git+https://github.com/botika/yarte#7210239d274aced48e8f7c3466058784202eb941" +source = "git+https://github.com/botika/yarte#dbd1a379fc333e995bfc2c055761fea48f566808" dependencies = [ "derive_more", "proc-macro2 1.0.18", @@ -2388,7 +2396,7 @@ dependencies = [ [[package]] name = "yarte_parser" version = "0.10.0" -source = "git+https://github.com/botika/yarte#7210239d274aced48e8f7c3466058784202eb941" +source = "git+https://github.com/botika/yarte#dbd1a379fc333e995bfc2c055761fea48f566808" dependencies = [ "annotate-snippets", "derive_more", diff --git a/benches/Cargo.toml b/benches/Cargo.toml index e883175..6f216ec 100644 --- a/benches/Cargo.toml +++ b/benches/Cargo.toml @@ -23,7 +23,7 @@ serde_derive = "1" serde_json = "1" serde_yaml = "0.8" tera = { git = "https://github.com/Keats/tera" } -yarte = { git = "https://github.com/botika/yarte", features = ["fixed"] } +yarte = { git = "https://github.com/botika/yarte", features = ["bytes_buff"] } [build-dependencies] ructe = { git = "https://github.com/kaj/ructe" } diff --git a/benches/benches/all.rs b/benches/benches/all.rs index 19ce929..d7a6439 100644 --- a/benches/benches/all.rs +++ b/benches/benches/all.rs @@ -1,8 +1,8 @@ -use criterion::{criterion_group, criterion_main, Criterion}; use benches::{ askama_bench, fomat, handlebars, horrorshow_bench, liquid, markup_bench, maud_bench, - ramhorns, ructe, sailfish, std_write, tera, yarte_bench, yarte_fixed, + ramhorns, ructe, sailfish, std_write, tera, yarte_bench, yarte_bytes, yarte_fixed, }; +use criterion::{criterion_group, criterion_main, Criterion}; fn big_table(c: &mut Criterion) { let mut g = c.benchmark_group("Big table"); @@ -18,7 +18,8 @@ fn big_table(c: &mut Criterion) { g.bench_function("Sailfish", |b| sailfish::big_table(b, &100)); g.bench_function("Tera", |b| tera::big_table(b, &100)); g.bench_function("Yarte", |b| yarte_bench::big_table(b, &100)); - g.bench_function("Yarte Fixed", |b| yarte_fixed::big_table(b, &100)); + g.bench_function("Yarte Send", |b| yarte_bytes::big_table(b, &100)); + g.bench_function("Yarte ?Send", |b| yarte_fixed::big_table(b, &100)); g.bench_function("write", |b| std_write::big_table(b, &100)); g.finish(); } @@ -37,7 +38,8 @@ fn teams(c: &mut Criterion) { g.bench_function("Sailfish", |b| sailfish::teams(b)); g.bench_function("Tera", |b| tera::teams(b, &0)); g.bench_function("Yarte", |b| yarte_bench::teams(b)); - g.bench_function("Yarte Fixed", |b| yarte_fixed::teams(b)); + g.bench_function("Yarte Send", |b| yarte_bytes::teams(b)); + g.bench_function("Yarte ?Send", |b| yarte_fixed::teams(b)); g.bench_function("write", |b| std_write::teams(b, &0)); g.finish(); } diff --git a/benches/src/lib.rs b/benches/src/lib.rs index fe72951..7cf17ce 100644 --- a/benches/src/lib.rs +++ b/benches/src/lib.rs @@ -13,6 +13,7 @@ pub mod sailfish; pub mod std_write; pub mod tera; pub mod yarte_bench; +pub mod yarte_bytes; pub mod yarte_fixed; include!(concat!(env!("OUT_DIR"), "/templates.rs")); diff --git a/benches/src/sailfish.rs b/benches/src/sailfish.rs index cbcb210..79e6ab0 100644 --- a/benches/src/sailfish.rs +++ b/benches/src/sailfish.rs @@ -42,7 +42,7 @@ pub fn teams(b: &mut criterion::Bencher<'_>) { b.iter(|| { let teams = TeamsTemplate { year: teams.year, - teams: &teams.teams + teams: &teams.teams, }; teams.render_once().unwrap() }); diff --git a/benches/src/yarte_bytes.rs b/benches/src/yarte_bytes.rs new file mode 100644 index 0000000..8077630 --- /dev/null +++ b/benches/src/yarte_bytes.rs @@ -0,0 +1,58 @@ +use yarte::TemplateBytes; + +pub 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 t = BigTable { table }; + b.iter(|| t.call(109915).unwrap()); +} + +#[derive(TemplateBytes)] +#[template(path = "big-table")] +struct BigTable { + table: Vec>, +} + +pub fn teams(b: &mut criterion::Bencher<'_>) { + let t = 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(|| t.call(239).unwrap()); +} + +#[derive(TemplateBytes)] +#[template(path = "teams")] +struct Teams { + year: u16, + teams: Vec, +} + +struct Team { + name: String, + score: u8, +} diff --git a/benches/src/yarte_fixed.rs b/benches/src/yarte_fixed.rs index 84c14e6..7ffa86a 100644 --- a/benches/src/yarte_fixed.rs +++ b/benches/src/yarte_fixed.rs @@ -1,3 +1,5 @@ +use criterion::black_box; +use std::mem::MaybeUninit; use yarte::TemplateFixed; pub fn big_table(b: &mut criterion::Bencher<'_>, size: &usize) { @@ -9,26 +11,20 @@ pub fn big_table(b: &mut criterion::Bencher<'_>, size: &usize) { } table.push(inner); } - let ctx = BigTable { table }; + let t = BigTable { table }; b.iter(|| { - let mut buf = String::with_capacity(109915); - unsafe { - buf.as_mut_vec().set_len(109915); - let b = ctx.call(buf.as_bytes_mut()).unwrap(); - buf.as_mut_vec().set_len(b); - } - buf + black_box(t.call(&mut [MaybeUninit::uninit(); 109915]).unwrap()); }); } #[derive(TemplateFixed)] -#[template(path = "big-table.hbs")] +#[template(path = "big-table")] struct BigTable { table: Vec>, } pub fn teams(b: &mut criterion::Bencher<'_>) { - let teams = Teams { + let t = Teams { year: 2015, teams: vec![ Team { @@ -51,18 +47,12 @@ pub fn teams(b: &mut criterion::Bencher<'_>) { ], }; b.iter(|| { - let mut buf = String::with_capacity(239); - unsafe { - buf.as_mut_vec().set_len(239); - let b = teams.call(buf.as_bytes_mut()).unwrap(); - buf.as_mut_vec().set_len(b); - } - buf + black_box(t.call(&mut [MaybeUninit::uninit(); 239]).unwrap()); }); } #[derive(TemplateFixed)] -#[template(path = "teams.hbs")] +#[template(path = "teams")] struct Teams { year: u16, teams: Vec, diff --git a/benches/templates/big-table.hbs b/benches/templates/big-table.hbs index 6255b49..695a071 100644 --- a/benches/templates/big-table.hbs +++ b/benches/templates/big-table.hbs @@ -1 +1 @@ -{{#each table}}{{#each this}}{{/each}}{{/each}}
{{ this }}
+{{#each table}}{{#each this}}{{/each }}{{/each }}
{{ this }}
diff --git a/benches/templates/teams.hbs b/benches/templates/teams.hbs index 5af2727..5bc3f3b 100644 --- a/benches/templates/teams.hbs +++ b/benches/templates/teams.hbs @@ -1 +1 @@ -{{ year }}

CSL {{ year }}

    {{#each teams }}
  • {{ name }}: {{ score }}
  • {{/each}}
+{{ year }}

CSL {{ year }}

    {{#each teams }}
  • {{ name }}: {{ score }}
  • {{/each }}