Django模板包含速度慢?

20

我应该尽量减少模板包含吗?我有点儿随意地使用它们,但我想知道它们是否在渲染模板时效率低下或增加了一些开销。

在某些情况下,我的模板会包含其他模板,这些模板又包含其他模板。

1个回答

28

通常情况下,模板渲染时间比数据库时间要小得多,因此在早期阶段通常不需要过多担心它;还有其他地方可以更有效地提高性能。

对于部署,您通常可以通过使用缓存加载器(您可能需要向下滚动一点)来提高模板包含的性能。然后它只加载模板一次,之后可以使用已编译的模板,而不需要从磁盘加载它。

针对模板渲染开销的问题,一旦您将其缓存,就非常便宜了。我根本不用担心它。以最大化系统可维护性的方式操作。

如果我不提及(希望是提醒)两个关于性能优化的箴言,那么可能会让人觉得不负责任;它们是足够常见的说法,如果您不熟悉它们,应该能够找到大量的信息。

  1. 不要过早优化。
  2. 衡量 - 不要猜测。

1
我已经使用Django两年了,从未听说过缓存加载器。谢谢。唉,我只有一个赞可以给。 - zsquare
2
@zsquare:我认为它并没有得到应有的重视。我之所以发现它,是因为我在做一个特定的非 Web 事情,在连续渲染数千个模板时,我知道一定有一种缓存方式,人们以前一定有过这种需求——即使那时我没有立即在文档中找到它,但是通过漏洞跟踪器中的一个票证找到了它。 - Chris Morgan
13
Django的模板速度非常慢,而且通常情况下数据库并不是瓶颈,只有在某些情况下才是。这个原则只是一个教条。当我在一个页面上运行ab时,其中包含了7个典型的查询(一些连接、1个COUNT、没有聚合等),并且使用缓存加载器包含20个模板,然后将相同的模板渲染为包含相同输出的0个包含的模板时,我的请求从每秒48个降至每秒8个(使用ab -n 1000 -c 4 [url])- 在带有4个工作进程的uWSGI上,在四核8GB RAM的机器上,除了数据库外没有任何硬盘IO。 - orokusaki
有趣(关于单线程),谢谢。另外,我犯了一个错误;我在运行Django的VirtualBox只分配了1GB的RAM。我坚持认为模板包含非常慢,在我工作过的大多数应用程序中都是一个非常频繁使用的功能,但承认20个包含有点太多了。我的大多数模板只有3-6个包含。 - orokusaki
调用模型方法也算模板包含吗?我不是很确定,所以想知道一下。 - Saransh Mohapatra
2
@SaranshMohapatra:不是的。这里查询的只是包含其他模板的模板,使用 {% include %} - Chris Morgan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接