This repo tries to assess Rust template engine performance. Following the download ratings from crates.io, these nine projects are assessed:
- write!: the std library
write!
macro - Handlebars: Handlebars templating implemented in Rust
- Tera: template engine based on Jinja2/Django templates
- Liquid: the liquid templating language for Rust
- Askama: type-safe, compiled Jinja-like templates for Rust
- horrorshow: a templating library written in rust macros
- ructe: Rust Compiled Templates, efficient type-safe web page templates
- fomat: alternative syntax for print/write/format-like macros with a small templating language
- markup: A blazing fast, type-safe template engine for Rust.
These results are from a server with an Intel i9-9880H CPU. Your mileage may vary.
Updated as of 2020-07-01, as a violin plot generated by Criterion:
Numbers, as output by Criterion:
Big table/Askama time: [475.76 us 476.61 us 477.54 us]
Big table/fomat time: [276.09 us 276.77 us 277.77 us]
Big table/Handlebars time: [14.581 ms 14.607 ms 14.634 ms]
Big table/Horrorshow time: [332.64 us 333.55 us 334.66 us]
Big table/Liquid time: [11.844 ms 11.869 ms 11.893 ms]
Big table/Markup time: [270.76 us 271.65 us 272.82 us]
Big table/Ructe time: [423.96 us 424.89 us 425.98 us]
Big table/Sailfish time: [34.931 us 35.098 us 35.312 us]
Big table/Tera time: [3.0856 ms 3.1014 ms 3.1163 ms]
Big table/Yarte time: [230.10 us 230.58 us 231.23 us]
Big table/write time: [345.93 us 346.52 us 347.20 us]
Teams/Askama time: [869.47 ns 880.35 ns 891.82 ns]
Teams/fomat time: [501.28 ns 504.14 ns 507.05 ns]
Teams/Handlebars time: [16.864 us 16.930 us 17.011 us]
Teams/Horrorshow time: [553.18 ns 555.89 ns 558.89 ns]
Teams/Liquid time: [11.284 us 11.312 us 11.344 us]
Teams/Markup time: [410.65 ns 413.97 ns 418.25 ns]
Teams/Ructe time: [1.1210 us 1.1394 us 1.1597 us]
Teams/Sailfish time: [137.46 ns 138.11 ns 138.90 ns]
Teams/Tera time: [8.3290 us 8.3913 us 8.4978 us]
Teams/Yarte time: [363.97 ns 366.07 ns 368.53 ns]
Teams/write time: [689.05 ns 694.60 ns 701.33 ns]
$ cargo bench
Plots will be rendered if gnuplot
is installed and will be available in the
target/criterion
folder.