Это больше вопрос эффективности.Моя веб-страница django работает нормально, в том смысле, что я не получаю никаких ошибок, но она очень медленная.Это, как говорится, я не знаю, где еще я хотел бы спросить об этом, кроме здесь, так что вот так:
Я разрабатываю панель мониторинга продаж.При этом я снова и снова получаю доступ к одним и тем же данным и хотел бы ускорить процесс.
Например, одна из моих метрик - количество выигранных возможностей.Это открывает доступ к моей модели возможностей, сортирует возможности, полученные за последние X дней, и сообщает об этом.
Еще одна метрика - это упущенные возможности.То есть о тех возможностях, о которых еще сообщается, что они работают, но о которых не было никаких действий в течение Y дней.Эта метрика также обращается к моей модели возможностей.
Я читаю здесь , что наборы запросов ленивы, что, если я правильно понимаю эту концепцию, будет означать, что моя фактическая база данных доступна только в самом конце,Обычно это было бы идеальной ситуацией, поскольку все фильтры на месте, а набор запросов обращается только к минимальному объему информации.
В настоящее время у меня есть отдельная функция для каждой метрики.Итак, для приведенных выше примеров у меня есть compile_won_opportunities и compile_neglected_opportunities.Каждая функция начинается с чего-то вроде:
won_opportunities_query = Opportunities.objects.all()
, а затем я отфильтровываю ее оттуда.Если я правильно читаю документацию, это означает, что я обращаюсь к одной и той же базе данных много, много раз.
При загрузке моей веб-страницы наблюдается заметная задержка.В попытке выяснить, что является причиной задержки, я закомментировал различные разделы кода.Когда я закомментирую код, который обращается к моей базе данных для каждой функции, моя веб-страница загружается немедленно.Сначала я хотел получить доступ к моей базе данных в вызывающей функции:
opportunities_query = Opportunities.objects.all()
, а затем передать этот запрос каждой функции, которая ее использует.Мое обоснование состояло в том, что доступ к базе данных будет возможен только один раз, но, очевидно, django не работает таким образом, так как это не имело очевидной разницы во времени загрузки моей страницы.Итак, после моего очень многословного объяснения, как я могу ускорить загрузку моей страницы?