7个不稳定版本 (3个破坏性更新)
0.4.1 | 2024年1月11日 |
---|---|
0.4.0 | 2024年1月11日 |
0.3.1 | 2024年1月10日 |
0.2.1 | 2024年1月10日 |
0.1.0 | 2024年1月9日 |
#23 in #jinja
每月71次下载
用于 dynja
9KB
60 行
Dynja
专注于DevEx和性能的Jinja伪引擎
为什么选择Dynja?
让我们看看两种替代方案
- Askama:在基准测试中非常快,但开发体验不是很好,因为每次修改模板时都必须重新编译您的web服务器
- MiniJinja:在基准测试中有不错的性能,但开发体验很棒,具有热重载,甚至可能还有实时重载
所以让我们两者兼而有之:使用MiniJinja进行调试模式(更好的DevEx),并使用Askama进行发布模式(更好的性能)
这就是Dynja的实质所在
如何使用?
将dynja
依赖项添加到您的Cargo.toml
中,同时添加askama
依赖项。由于minijinja
依赖项仅用于内部,因此不需要,而askama
需要在发布构建中导出。
[dependencies]
dynja = { version = "0.4", features = ["askama_release"] }
askama = "0.12"
现在您可以将dynja
导入并像使用askama
一样使用它。不错吧?
use dynja::Template;
#[derive(Template)]
#[template(path = "index.html")]
struct MyTemplate {
name: &'static str,
}
fn main() {
let template = MyTemplate { name: "Test" };
println!("Template Render: {}", template.render().unwrap());
}
它将自动在调试时的minijinja和发布时的askama之间进行选择,所以您不必担心。
注意:如果您愿意,可以使用不带askama的dynja
。只需在您的Cargo.toml
中添加以下内容
dynja = "0.4"
它还对发布模式的minijinja
进行了优化,但它的性能不会像askama
那样好。
有关更多信息,请参阅注意事项部分。
祝您玩得开心!
基准测试
注意:这些基准测试没有正确执行,因此它们不代表真实世界场景。但它们确实让您看到了切换引擎时的差异。
在位于此存储库根目录的dynja_bench
上进行了测试。
Dynja 0.4.0(调试)
Benchmarking: MiniJinja
<!DOCTYPE html>
<html>
<head></head>
<body>
<h1>Dynja Benchmark</h1>
<h2>Name: Tests</h2>
<h2>Number: 1337</h2>
<h2>Float: 420.0</h2>
</body>
</html>
Iteration: 999999
Benchmark finished
Time taken to finish iterations: 103629ms (103s)
Dynja 0.4.0(发布 - features = ["askama_release"])
Benchmarking: Askama
<!DOCTYPE html>
<html>
<head></head>
<body>
<h1>Dynja Benchmark</h1>
<h2>Name: Tests</h2>
<h2>Number: 1337</h2>
<h2>Float: 420</h2>
</body>
</html>
Iteration: 999999
Benchmark finished
Time taken to finish iterations: 937ms (0s)
发布构建的迭代速度比调试构建快约110倍。
顺便提一下,这个基准测试也并没有说 minijinja 的速度有多慢。为了实现模板的热重载,我们每次在 render()
时都必须清除 minijinja 的缓存模板,这意味着我们为了获得更好的开发体验而严重影响了它的性能。以下是在未启用 "askama_release"
功能的情况下,在发布模式下进行的测试结果。
Dynja 0.4.0(发布版)
Benchmarking: MiniJinja
<!DOCTYPE html>
<html>
<head></head>
<body>
<h1>Dynja Benchmark</h1>
<h2>Name: Tests</h2>
<h2>Number: 1337</h2>
<h2>Float: 420.0</h2>
</body>
</html>
Iteration: 999999
Benchmark finished
Time taken to finish iterations: 2851ms (2s)
许可证
本项目根据 GNU AGPL-3.0
许可证授权。不允许使用更高版本。
请阅读项目根目录中的 LICENSE
文件以获取更多信息。
注意事项
尽管 MiniJinja 和 Askama 都与 Jinja 有关,但它们之间并不是100%兼容的。所以要注意不一致的地方!
在大多数情况下,MiniJinja 的较慢性能并不会像你想象的那样影响你。在上面的基准测试(发布模式)中,它仍然在1秒钟内渲染了350,754次模板,这对于一个Web服务器来说已经足够了。如果你真的需要那种性能优势,并且你知道你的模板在各个引擎之间都是兼容的,根据基准测试,Askama 仍然以每秒1,067,235次渲染的优势获胜。如果你需要确保调试模板与发布模板兼容,请坚持使用 MiniJinja。
依赖项
~270–720KB
~17K SLoC