首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Django表演-神秘的11秒

Django表演-神秘的11秒
EN

Stack Overflow用户
提问于 2012-07-16 21:25:48
回答 3查看 209关注 0票数 1

我遇到了一些性能问题,这让我感到困惑。我在MySQL中使用了Django。我执行以下操作:

1.使用Ajax从网页发送数据。

2.在Views.py中接收post数据,并通过许多函数调用处理它,将数据插入到MySQL中。我要做的第一件事就是设置一个Python变量timeStart。在返回响应之前,我要做的最后一件事是计算处理数据的时间:

代码语言:javascript
复制
processTime = time.clock() - timeStart 

我使用render-to-response发送响应,其中响应是processTime。

3.网页上会显示processTime。

processTime为1.5秒,但是从通过Ajax发送数据到接收响应的总时间是13秒。渲染一个简单的页面以及发送和接收数据需要11.5秒--这是一个很长的时间。但后来事情变得更奇怪了。我缩短了views.py函数,几乎立即返回一个响应。这将处理时间从1.5秒减少到几乎为0。但它也将总时间从13秒减少到大约2秒。这似乎表明,实际上,这是数据处理缓慢的原因。然而,这并不能解释计算出的processTime仅为1.5秒。我确实在第一行设置了startTime,并在最后一行计算了processTime。StartTime未被覆盖。

这几乎就像是有某种清理过程或与完成并发送响应相关的东西,依赖于函数调用的东西。但是什么呢?或者我正在做一些愚蠢的事情来计算我的时间?我设置了debug = False。

编辑-额外信息:

模板只包含"hello“和{{result}}两个字。我没有返回任何查询集,只返回结果:{‘processTime’:processTime}

当我使用MySQL存储函数时,可能会出现时间差。就像它返回结果一样,但仍在做一些事情?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-07-21 00:13:11

问题出在我测量processTime的方式上。我需要使用time.time(),而不是time.clock()。time.clock()告诉我我只花了1.5秒,但这显然只是CPU时间,而不是实际时间。在view.py中花费的实际时间更像是13秒,这与我为整个事务测量的时间相对应。

票数 0
EN

Stack Overflow用户

发布于 2012-07-16 22:47:43

您拥有在模板呈现阶段查询的ORM/DB模型查询集。这不是由您的视图计算的。磁盘命中导致了大约10秒。

或者,它是由您的视图通过一些与ORM相关的中间件触发的,这些中间件在发送回HTTP响应之前执行进一步的DB操作。

打开并检查数据库日志记录。

票数 0
EN

Stack Overflow用户

发布于 2012-07-16 22:58:39

您还没有给出如何返回响应的适当细节,但我猜您正在做这样的事情:

代码语言:javascript
复制
data = MyModel.objects.all()
processTime = time.clock() - timeStart 
return render_to_response('my_template.html, {'processTime': processTime,
                                              'data': myqueryset})

因此,processTime的计算远不是创建响应时发生的最后一件事,因为整个模板渲染都是在之后进行的。有两个因素可以打折:呈现模板本身的成本,这远远不是很便宜(Django的模板语言不是特别有效);以及任何数据库调用的成本:例如,我下面给出的MyModel.objects.all()查找实际上不会到达数据库,直到在模板中迭代它,所以这应该是在processTime计算之后。

在任何情况下,您都应该研究Django调试工具栏,它为您提供了更好的渲染时间细分。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11505336

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档