askama/bench-build/README.md
René Kijewski 98cb4233e2 Make derive optional
This is the same as in e.g. `serde` with the feature of the same name.
If you manually depend on `rinja_derive`, then you can make better use
of your multi-core setup.
2025-02-09 17:47:17 +01:00

1.7 KiB
Raw Blame History

Run the script ./run.sh in this directory to compare the compile compile of rinja

  • uses feature derive vs
  • it does not use that feature.

The output might look like:

Benchmark 1: cargo run --features=derive
  Time (mean ± σ):      3.378 s ±  0.041 s    [User: 7.944 s, System: 1.018 s]
  Range (min … max):    3.345 s …  3.424 s    3 runs
 
Benchmark 2: cargo run
  Time (mean ± σ):      3.283 s ±  0.130 s    [User: 8.400 s, System: 1.091 s]
  Range (min … max):    3.141 s …  3.398 s    3 runs
 
Summary
  cargo run ran
    1.03 ± 0.04 times faster than cargo run --features=derive

----------

Benchmark 1: cargo run --release --features=derive
  Time (mean ± σ):      4.733 s ±  0.050 s    [User: 9.026 s, System: 0.749 s]
  Range (min … max):    4.689 s …  4.788 s    3 runs
 
Benchmark 2: cargo run --release
  Time (mean ± σ):      4.504 s ±  0.032 s    [User: 9.010 s, System: 0.733 s]
  Range (min … max):    4.481 s …  4.541 s    3 runs
 
Summary
  cargo run --release ran
    1.05 ± 0.01 times faster than cargo run --release --features=derive

This shows that while it is less convenient for small projects it might be better to use the following setup. This might be especially true if you are using rinja in a library. Without the feature, cargo will be able to compile more dependencies in parallel.

# Cargo.toml
[dependencies]
rinja = { version = "0.3.5", default-features = false, features = ["std"] }
rinja_derive = { version = "0.3.5", features = ["std"] }
// lib.rs
use rinja::Template as _;
use rinja_derive::Template;

The script uses hyperfine. Install it with cargo install hyperfine.