【问题标题】:Django : Enabling the cached template loaderDjango:启用缓存的模板加载器
【发布时间】:2014-09-18 01:29:43
【问题描述】:

我在几种情况下分析了我的应用程序,我得出的结论是我的瓶颈是模板渲染,示例转储

61323 function calls (59462 primitive calls) in 0.827 seconds

   Ordered by: cumulative time

   ncalls  tottime  percall  cumtime  percall filename:lineno(function)
        1    0.000    0.000    0.827    0.827 /home/haki/src/CalcSite/calc/views.py:279(home)
        1    0.000    0.000    0.815    0.815 /usr/local/lib/python2.7/dist-packages/django/shortcuts/__init__.py:31(render)
      3/1    0.000    0.000    0.814    0.814 /usr/local/lib/python2.7/dist-packages/django/template/loader.py:151(render_to_string)
      4/1    0.000    0.000    0.808    0.808 /usr/local/lib/python2.7/dist-packages/django/template/base.py:136(render)
      5/1    0.000    0.000    0.808    0.808 /usr/local/lib/python2.7/dist-packages/django/template/base.py:133(_render)
    286/1    0.002    0.000    0.808    0.808 /usr/local/lib/python2.7/dist-packages/django/template/base.py:836(render)
    714/2    0.000    0.000    0.808    0.404 /usr/local/lib/python2.7/dist-packages/django/template/debug.py:76(render_node)
        1    0.000    0.000    0.808    0.808 /usr/local/lib/python2.7/dist-packages/django/template/loader_tags.py:100(render)
        6    0.000    0.000    0.803    0.134 /usr/local/lib/python2.7/dist-packages/django/template/loader_tags.py:48(render)

根据docs,启用缓存模板会对性能产生重大影响。所以我尝试添加此设置

TEMPLATE_LOADERS = (
    ('django.template.loaders.cached.Loader', (
        'django.template.loaders.filesystem.Loader',
        'django.template.loaders.app_directories.Loader',
    )),
)

我所有的模板都在app/templates。我没有使用太多模板片段\包含,我所有的应用程序标签(~4)都是线程安全的。查看此会话的数据库跟踪,我在 9 毫秒内返回了 6 个查询 - 这不是问题。

我看不出效果报告有什么不同。我在这里错过了什么吗?我测试错了吗?

【问题讨论】:

  • 您正在按 ctime 排序,因此如果您的模板标签正在做任何重要的事情(如数据库访问),它将被包含在内。列表的最后一行(blocktag.render)以树状方式呈现其他模板部分,因此将包括所有其他部分。提供完整的个人资料列表,我们也许可以看到问题出在哪里

标签: django templates caching


【解决方案1】:

缓存的模板加载器仍然需要渲染模板。节省来自不必每次都从文件系统中再次读取模板,从而节省 IO。

如果要缓存模板,请查看 {% cache %} 模板标签。但请注意,您需要包含正确的密钥。

【讨论】:

  • 来自 Django 文档的仅供参考:“在 Django 1.11 中更改:添加了在调试为 False 时自动启用缓存模板加载器。”
【解决方案2】:

从 Django 1.8+ 开始,您现在将其放在 OPTIONS block of the TEMPLATES setting.

【讨论】:

猜你喜欢
  • 2011-05-03
  • 2016-08-28
  • 2021-09-14
  • 2017-04-20
  • 2017-10-25
  • 2011-05-13
  • 2021-10-22
  • 2014-03-10
  • 2011-10-04
相关资源
最近更新 更多