我有一个模板,最终输出大约700个输入元素,如下所示:
<input class="ticket" size="3" maxlength="15" type="text" name="{{ ticket.id }}">
与调用视图函数和渲染模板(生成HTML,但不计算浏览器渲染时间)一起,需要大约1.5秒。我正在优化模板以查看最长时间的内容,因为还有一些其他更复杂的事情正在发生......我意识到如果我删除{{ ticket.id }}
部分,渲染时间下降到~0.48秒。我甚至在票证模型上做了一个功能:
def get_input_name(self): return str(self.id)
并替换模板中的行:
<input class="ticket" size="3" maxlength="15" type="text" name="{{ ticket.get_input_name }}">
并且这产生相同的输出,在~0.52秒。
为什么调用{{ ticket.id }}
这么慢?
答案 0 :(得分:0)
尝试查看正在执行的SQL查询。从shell(./manage.py shell
)试试这个:
from django.db import connection
from pprint import pprint
from django.http import HttpRequest
from myproject.myapp.views import myview
f = open('/tmp/queries.txt','w')
myview(HttpRequest(), whatever_other, args_you_need)
pprint(connection.queries, f)
f.close()
然后查看/tmp/queries.txt
并查看实际查询的内容。每个查询也将花费时间。如果您没有看到任何异常(例如每次通过模板循环查询),那么您的问题可能不是数据库,我不知道。