我一直在为这个问题摔角至少两天。 有一个视图会生成一个页面,显示某个用户/电话分机所做的所有电话呼叫。没有什么奇特的,只有很长的一页,最多1000行。Django - 生产中特定视图的等待时间需要很长的时间
此视图函数从url中接收一些参数,以便选择要在此页面上显示的内容。有两种情况,一个地方的“延长= XXXXXX”传递和一个其中“user = XXXX”中的URL传递:
if request.GET.get("extension", None):
# extension_query expects only one Extension object
extension_query = Extension.objects.filter(number=request.GET["extension"])
... # Here I do some conditionals to match the right Extension object.
elif request.GET.get("user", None):
... # Simple stuff, nothing to significant.
# at the end I call render_to_response normally
编辑 - 这是一段调用我的自定义选择render_to_response代码:
EDIT2 - 迫使查询集的评价约翰·C·的建议后,加载时间从1.6分钟减少到14秒:
if (request.GET.get("format", None) == "screen"
or request.GET.get("print", False)):
ctx = dict(calls=list(calls), client=client, extension=extension,
no_owner_extension=no_owner_extension,
start=start_date, end=end_date, tab="clients",
owner=user)
return finish_request(
request, "reports/exporting_by_call_type.html", ctx)
:现在我把它传递给我的定制选择render_to_response前投我的调用列表()
这是我定制的render_to_response:
def finish_request(request, template, context):
if "print" in request.GET or "print" in request.POST:
context.update(printing=True)
return render_to_response(
template, RequestContext(request, context))
在我的机器,它需要3-4秒,根据Chrome的审计工作BOTH情况完全处理这一观点的现实数据的情况。在生产中,加载视图的时间需要3-4秒,其中用户参数在URL中传递,但当扩展通过时,需要2分钟!
编辑:这说的是,在URL传球用户或扩展之间的区别并不在顶部,因为当分机号码属于别人的,我表示改变最终呈现的页面,除了一条线是非常重要的。其余的数据是完全一样的。
我在我的代码中描述了生成这个视图的每个小块。我计算了视图在我的生产代码中需要多长时间render_to_response(0.05秒)。我拿出分机的部分在我的模板中被调用但没有成功。我还使用django_debug_toolbar查看每个SQL语句正在做什么,最多只需2秒。
我还要补充一点,我使用的mod_wsgi,调试=我的制作设置假 ... YSlow的利率这个页面94尽管采取2分钟。
任何人都可以点亮一下吗?
小调 - 在浏览Django文档时,我注意到[repr()](https://docs.djangoproject.com/en/1.3/ref/models/querysets/#when-querysets-are - 评估)Queryset函数,它强制对查询集进行评估,但是*没有*将它变成列表。在你(或某人)不希望*列表*,但仍然想要强制对查询集进行评估的情况下,这是一个选项。 – 2011-08-24 20:14:20