带有缓存加载器的 Jinja2 与 django 模板 - 性能比较如何?

Posted

技术标签:

【中文标题】带有缓存加载器的 Jinja2 与 django 模板 - 性能比较如何?【英文标题】:Jinja2 vs django templates with cached loader - how does performance compare? 【发布时间】:2011-05-13 04:21:00 【问题描述】:

我很好奇 - 随着 django 1.2 中缓存模板加载器的引入,性能与最新的 Jinja2 相比如何?

有人试过运行测试吗?

谢谢。

【问题讨论】:

【参考方案1】:

Jinja 比 Django 模板系统更 Pythonic(更灵活)并且可能更快,但性能尤其取决于您的开发技能和其他参数。

如 Jinja 常见问题解答中所述:

http://jinja.pocoo.org/docs/faq/#how-fast-is-it

【讨论】:

我已经重写了从 Django 到 Jinja2 的所有模板并获得了令人印象深刻的加速,但我之前没有使用缓存加载器来处理 django 模板。【参考方案2】:

这是一个很好的问题,但却是错误的二分法,因为您可以使用 Django 的 cached.Loader 并将其传递给 Jinja Loaders 以缓存 Jinja 模板。

其次,模板缓存不仅仅是为了速度。我建议在 DEBUG=False 时使用缓存加载器,这样您可以在开发时轻松地迭代模板,但对于生产来说,缓存加载器很重要,因为如果不缓存模板,您的代码可能在中间的一段时间内不同步 -部署。

例如,假设您更改视图的上下文并更新模板,然后提交。现在,如果您 git pull 然后重新启动服务器,在 git pull 和重新启动之间的时间,视图将 500,因为您正在使用旧视图代码提供新模板。如果您每秒收到多个请求,这将导致生产 500,除非您的生产部署方法通过使用多个目录来避免这种情况。

【讨论】:

不完全是 - Django 的缓存加载器将它们存储在其进程内的内存中 - 所以在重新启动服务器时,你有新的模板。唯一的问题是确保自定义标签是线程安全的,我不确定 Jinja2 的模板是否被认为是与缓存加载器一起使用的线程安全的。

以上是关于带有缓存加载器的 Jinja2 与 django 模板 - 性能比较如何?的主要内容,如果未能解决你的问题,请参考以下文章

在 Django 中使用 Jinja2 加载 css 文件

带有 Jinja2 的 Django 1.8:Contrib 应用程序管理员不起作用

第 3 行的块标记无效:“原始”。您是不是忘记注册或加载此标签?使用 Django 1.9 和 Jinja2

在 bottle.py 中禁用 Jinja2 模板缓存的最佳方法是啥?

Jinja2 模板使用 Django 模板标签

Django(28)Django模板介绍