django: почему медленное получение поля .id модели в шаблоне? - PullRequest
3 голосов
/ 15 сентября 2011

У меня есть шаблон, который в итоге выводит около 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 }} намного медленнее?

1 Ответ

0 голосов
/ 08 марта 2012

Попробуйте посмотреть, какие 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 и посмотрите, какие запросы фактически выполнялись. Каждый запрос также будет иметь время, которое потребовалось. Если вы не видите ничего необычного (например, запрос каждый раз в цикле вашего шаблона), значит, ваша проблема, вероятно, не в базе данных, и я понятия не имею.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...