Начальная загрузка страницы Django замедлена после обновления Python 2–3 - PullRequest
0 голосов
/ 20 сентября 2019

Я запускаю Django 1.11.20.Я только что (наконец) совершил переход с Python 2.7 на 3.7.

Я заметил, что после обновления до Python 3 самая первая загрузка страницы после очистки кэша идет очень медленно.Пока у меня на компьютере разработчика только среда Python 3, поэтому я испытываю это при использовании ./manage.py runserver и FileBasedCache бэкэнда.Я не знаю, буду ли я испытывать то же самое в производственном стеке (nginx, uwsgi, redis и т. Д.).

Я использую Django Debug Toolbar, который дает мне несколько советов о том, в чем проблема не , но я не уверен, куда мне обратиться, чтобы увидеть, в чем проблема.

Время, указанное на панели инструментов отладки, запускает загрузку простой страницы с пустым кешем всреда Python 2.7 на моей машине разработки:

  • Процессор: 4877,89 мс
  • SQL 462,41 мс
  • Кэш: 1154,54 мс

Время, указанное панелью инструментов отладки, загружает ту же страницу с пустым кешем в среде Python 3.7 на моей машине для разработки:

  • ЦП: 91661.71мс
  • SQL 350,44 мс
  • Кэш: 609,65 мс

(Я использую файловое кеширование на этой машине для разработки, поэтому, когда я говорю «с пустым кешем», я просто имею в виду, что я rm -r cache перед загрузкой URL в моем браузере.)

Так что время SQL и Cache уменьшилосьghtly быстрее с обновлением, но время процессора удвоилось.Когда я открываю панель «Время» на панели инструментов отладки, я вижу, что «атрибут времени», который увеличился, является «запросом».

То же самое происходит на каждой странице (включая страницы, которые являются просто HTML, сгенерированным TemplateView, так что они не делают ничего хитрого), но только когда он впервые загружается из пустого кэша.После этого самого первого ответа все страницы возвращаются примерно к тому же времени ответа, что и в среде Python 2.Так что это как-то связано с первоначальным запросом.

Я не уверен, где искать, чтобы попытаться выяснить, что делает Django только по самому первому запросу.Есть указатели?Или есть что-то очевидное, что я могу ожидать более медленного перехода с Python 2.7 на 3.7?

1 Ответ

0 голосов
/ 20 сентября 2019

Я наконец смог отследить эту проблему до самой панели инструментов отладки Django, которая была повышена с 1.11 до 2.0 во время моего обновления Python 3.В частности, панель SQL панели инструментов вызывала замедление.У меня есть контекстный процессор, который выполняет запрос, если кэшированный объект не существует.Сам запрос быстрый, но по какой-то причине Django Debug Toolbar 2.0 очень медленно генерирует для него трассировку стека.Я не понял, что изменилось между 1.11 и 2.0, что привело к этой ужасной потере производительности, но теперь, когда я знаю, в чем проблема, я могу обойти ее.

...