gpt4 book ai didi

python - 为什么 Django 模板渲染字典这么慢?

转载 作者:太空狗 更新时间:2023-10-29 20:30:48 25 4
gpt4 key购买 nike

当我使用 Django 1.4 的默认模板系统渲染一个中等复杂的字典(4 层深,~2K 数据点)时,模板渲染步骤需要超过 2800 毫秒。当我直接从 python 执行 html-gen 时,它需要大约 80 毫秒。即使使用另一个模板库 ( jinja2) 也能在 300 毫秒内呈现相同的数据(事实上,几乎完全相同的模板语法 - 因为 jinja2 几乎是一个直接替代品)。

有趣的是,您甚至不必在模板中实际渲染字典来在 django 的模板系统中导致此性能问题...您所要做的就是通过 它作为模板的可用变量。我的一个 friend 建议这可能意味着系统是,“......做一个防御性的副本或(更愚蠢的)理解 [which] 由于运行构造函数需要时间”

有人知道为什么 django 的默认模板系统需要这么长时间来呈现字典吗?

* 我会在下方添加要求的详细信息 *

我在 Debug模式下运行,并将 DebugToolbarMiddleware 设置为我的中间件类之一。我的 settings.py 文件包括:

TEMPLATE_CONTEXT_PROCESSORS = global_settings.TEMPLATE_CONTEXT_PROCESSORS + (
'django.core.context_processors.request',
)

和....

# rendering like this
return render(
request,
template_name='ltm/search_results.html',
context_instance=RequestContext(request, {
'menus': menus,
'results': result_dict
})
)

最佳答案

如果您能向我们提供您的模板代码以更好地了解我们正在处理的具体模板处理类型,那就太好了。

首先,您遍历字典内容的方式存在潜在差异。 dict.items() 返回一个元组列表,它会消耗额外的内存并需要时间来初始构建,但是如果您使用 dict.iteritems( )

当您传入以点 . 开头的变量名时,也会涉及一些开销,例如foo.bar.baz,其中 Django 的模板执行所谓的 variable lookup。 ,试图确定您是通过键、对象的属性还是通过索引访问列表项来访问字典项。我没有使用过 Jinja2,因此与变量查找的问题可能完全无关,但如果两者之间存在差异,则值得考虑。

在任何一种情况下,由于您处理的是一个相当大的字典,如果您可以在 View 中重新组织它的结构以简化稍后在模板中访问数据的方式,这可能会有所帮助。

关于python - 为什么 Django 模板渲染字典这么慢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13180419/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com