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日

模板引擎 中排名第 127

Download history 1/week @ 2024-05-20 20/week @ 2024-07-01 41/week @ 2024-07-22

每月下载量 61

AGPL-3.0

9KB

Dynja

dynja-logo

Jinja 模拟引擎,专注于 DevEx 和性能

为什么选择 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 之间进行选择,所以您不必担心。

注意:如果您愿意,可以使用 dynja 而不使用 askama。只需在您的 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(发布 - 功能 = ["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。

依赖关系

~1–1.8MB
~39K SLoC