我如何加速Django模板渲染?在视图函数完全计算它需要的任何内容之后,我的模板需要大约1-2秒左右才能渲染。
我已经尝试在视图中执行所有数据库访问,这样模板只能访问RAM而不是数据库引擎。
我确实有很多include
s - 那里有问题吗?
答案 0 :(得分:18)
我花了很多时间来优化我的django模板代码。以下是适用于我的优化指南,但根据您的设置,您可能无法获得加速。
unicode
,而非str
:Django将所有变量强制转换为unicode。这不需要太长时间,但如果模板中的许多地方使用str
变量,则可能会导致明显的延迟。这很容易修复,只要您将文本数据发送到Django渲染器,请确保它是unicode。safe
:Django的自动安全措施非常好,但它们确实带来了很小的性能影响。如果您在模板中使用了很多变量,并且知道它是安全的,那么请务必将其标记为此类。render_template_from_string
时,django会拉取模板,编译它,然后渲染它。 Django可以很容易地缓存这个过程的前两部分并将它们存储在内存中。您只需在settings.py
文件中进行一次小的更改即可将cached.Loader
添加到TEMPLATE_LOADERS
。更多内容解释为in the Django documentation。endless pagination
:我发现endless pagination插件极其缓慢。这是因为它必须为每个页码加载一个新模板。我进去攻击它直到我按照我想要的方式进行操作,但在你这样做之前,尝试删除它,看看你得到了什么类型的性能改进。执行上述操作会将GAE实例上复杂页面的渲染时间从大约1.0S缩短到250ms,但同样,您的里程可能会有所不同。
答案 1 :(得分:8)
我建议在步骤0中向Django Debug Toolbar添加一个名为Django Toolbar Template Timings的额外面板。它告诉我在每个模板(块等)中花费了多少时间,以及SQL中有多少时间。这也是你的问题的额外验证。
以下是如何将面板添加到调试工具栏。 http://django-debug-toolbar.readthedocs.org/en/latest/configuration.html#debug-toolbar-panels
答案 2 :(得分:1)
我发现的另一个技巧:我必须显示一个755行* 15列的HTML表(总共填充11,325个数据)。
该页面过去通常会延迟大约25/30秒的加载时间,然后页面有点滞后。我所做的是使用display:none
设置表,并在页面完全加载后,使用JavaScript更改了CSS属性。
所有这些之后,页面最多加载6秒钟。我想Django花在渲染不可见元素上的时间要少得多。
我不知道它是否仅适用于我自己的情况,但似乎可行。
答案 3 :(得分:0)
使用ManifestStaticFilesStorage
来提供静态文件。我见证的相对于使用默认LocMemCache
的{{3}}而言,性能提升是巨大的。差别是没有哈希需要在运行时计算。
我不太清楚为什么为什么差异如此巨大 - 而CachedStaticFilesStorage
最初需要计算哈希值并填充缓存,一旦缓存为我不希望相对于清单方法有显着的性能损失。但它 大量,文档还建议使用ManifestStaticFilesStorage
来提高性能。