3

我已這最終輸出大約700輸入元件像這樣的模板:與調用瀏覽功能,並且將所述模板呈現(生成HTML,但不包括瀏覽器渲染時間)django:爲什麼在模板中獲取模型的.id字段很慢?

<input class="ticket" size="3" maxlength="15" type="text" name="{{ ticket.id }}"> 

一起,它需要〜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 }}這麼慢?

+1

可能是因爲它會產生額外的SQL調用,雖然不太確定,但嘗試使用類似http://pypi.python.org/pypi/django-debug-toolbar-django13/0.8.4的分析 – armonge

+0

返回您是否在使用以及您的票務模型中有多少行? – nicolas

+0

@nicolas:postgresql,我的門票模型中有10個字段 – Claudiu

回答

0

嘗試查看正在執行的SQL查詢。從貝(./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,看看實際上正在取得哪些查詢。每個查詢也將花費時間。如果你沒有看到任何不尋常的東西(比如每次通過你的模板循環查詢),那麼你的問題可能不是數據庫,我不知道。

相關問題