django:加速模板渲染性能的指南

Cla*_*diu 11 django performance django-templates

我将如何加速Django模板渲染?在视图函数完全计算它需要的任何内容之后,我的模板需要大约1-2秒左右才能渲染.

我已经尝试在视图中执行所有数据库访问,这样模板只能访问RAM而不是数据库引擎.

我确实有很多includes - 那里有问题吗?

spe*_*ane 20

我只是花了很多时间来优化我的django模板代码.以下是适合我的优化指南,但根据您的设置,您可能无法获得加速的重要性.

  • 提供模板引擎unicode,而不是str:Django将所有变量强制转换为unicode.这不需要太长时间,但如果str在模板中的许多地方使用变量,它可能会变成明显的延迟.这很容易修复,无论何时将文本数据发送到Django渲染器,请确保它是unicode.
  • 标记变量为safe:Django的自动安全措施非常好,但它们确实带来了很小的性能影响.如果您在模板中使用了许多变量,并且您知道它是安全的,那么请务必将其标记为这样.
  • 缓存编译模板:当你调用时render_template_from_string,django拉取模板,编译它,然后渲染它.Django可以很容易地缓存这个过程的前两部分并将它们存储在内存中.您需要做的就是在settings.py文件中进行一个小的更改以添加cached.Loader到您的文件中TEMPLATE_LOADERS.Django文档中解释更多内容.
  • 修复或不使用endless pagination:我发现无尽的分页插件极其缓慢.那是因为它必须为每个页码加载一个新模板.我进去攻击它直到我按照我想要的方式进行操作,但在你这样做之前,尝试删除它,看看你得到了什么类型的性能改进.
  • 不要使用花式模板功能:继承,嵌套块,for循环和包含很好,但它们带来性能成本.使用它们时要非常小心,尽量不要进行多级继承.使用客户端渲染可以更好地处理for循环.
  • 客户端渲染:加速服务器端渲染的一个简单技巧就是在客户端上执行此操作.一种策略是在django模板中嵌入json结构,然后使用javascript构建HTML.这显然违背了django服务器端渲染的目的,但它会导致加速.如果您必须在首屏下方呈现内容(即,用户不需要在页面加载时立即看到它),这将特别有用.

执行上述操作会将GAE实例上复杂页面的渲染时间从大约1.0S缩短到250ms,但同样,您的里程可能会有所不同.


Joh*_*ann 10

我建议在步骤0中向Django调试工具栏添加一个名为Django Toolbar Template Timings的额外面板.它告诉我在每个模板(块等)中花费了多少时间,以及SQL中有多少时间.这也是额外的验证,这是你的问题.

在此输入图像描述

以下是如何将面板添加到调试工具栏. http://django-debug-toolbar.readthedocs.org/en/latest/configuration.html#debug-toolbar-panels

  • 不幸的是,这个包(以及为此目的推荐的所有其他包)不再维护。我正在寻找替代方案。 (4认同)
  • 这个很好,但并不完全相同:https://pypi.org/project/django-debug-toolbar-template-profiler/ (3认同)