2011-12-20 79 views
7

我将如何去加快Django模板渲染速度?在视图函数完全计算所需的任何内容后,我的模板大约需要1-2秒左右才能渲染。django:加快模板渲染性能的指导

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

我确实有很多include s - 那里可能有问题吗?

回答

14

我只花了很多时间优化我的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插件极其缓慢。这是因为它必须为每个页码加载一个新的模板。我进去闯了一下,直到我按照自己的意愿做了它,但在此之前,请尝试删除它,并查看您获得的性能改进类型。
  • 不要使用花式模板特征:循环,嵌套块,for循环和包含很好,但它们带有性能成本。使用它们时要非常小心,并且不要做多层次的继承。 For循环可以更好地处理客户端渲染。
  • 客户端渲染:加快服务器端渲染的一个简单的技巧就是在客户端上执行。一种策略是在django模板中嵌入json结构,然后让javascript构建HTML。这显然违背了django服务器端渲染的目的,但会导致加速。如果您不得不在折叠下面呈现内容(例如,用户在页面加载时不需要立即看到它),这一点尤其有用。

通过上述操作,我可以将GAE实例上复杂页面的渲染时间从大约1.0秒缩短到250毫秒,但同样,您的里程可能会有所不同。

+1

+1用于删除包括。我用包含内循环。删除它们会导致渲染时间大大加快(接近2倍) – dimyG 2016-12-19 09:05:28

+0

在当前版本的Django(本文中为1.10)中,当DEBUG为False时,将自动启用cached.Loader。 – hayavuk 2017-01-20 21:46:08

+0

你有更多的信息关于如何解决无尽的分页问题(如问题或原因) – SebCorbin 2017-12-01 16:44:23