Уменьшить количество запросов к базе данных, начиная с django «для циклов» в шаблонах - Django веб-сайт чрезвычайно медленный - PullRequest
0 голосов
/ 13 апреля 2020

У меня проблемы с оптимизацией времени загрузки моего сайта. Я установил Django Панель инструментов отладки, чтобы увидеть, откуда берутся задержки моего запроса на 3-4 секунды. Дело в том, что он исходит из множества дублированных SQL запросов.

Недавно я оптимизировал свой код представления, чтобы не было дублирования запросов, но основная часть этого происходит из моего рендеринга шаблонов, особенно из моего for циклы (которые, к сожалению, есть везде).

Вот пример:

  • На этой странице показаны транзакции, разделенные на несколько разделов. Он разбит на страницы 48. Из-за организации моего шаблона я вынужден "за l oop" каждую транзакцию, связанную с пользователем в каждой категории, выполнять некоторые операции if / elif / else.
  • Из того, что я увидел, удалив 5 из 6 для циклов for, он достигает моей базы данных RDS КАЖДЫЙ ВРЕМЯ a для l oop запускается, что неэффективно звучит, и для загрузки требуется вечность.

Я видел несколько методов кэширования, но я не знаю, применимо ли мое дело к такой вещи.

1 Ответ

0 голосов
/ 13 апреля 2020

Используйте select_related () , когда вы следуете за связанными объектами.

Это повышение производительности, которое приводит к одному более сложному запросу, но означает более позднее использование отношений внешнего ключа не требует запросов к базе данных.

Вы следите за связанными объектами по всему шаблону, например offer и (offer.)thing. Если вы включите s elect_related('offer', 'offer__thing') в свой набор запросов, вы значительно сократите число запросов.

Для справки в будущем посмотрите также на следующие отношения с prefetch_related () . Это не актуально в вашем случае, но помните об этом на будущее.

...