Как сделать так, чтобы представление, использующее веб-скрапер, загружалось быстрее
У меня есть представление, которое выводит на страницу результаты по городу назначения. Как часть представления, веб-скребок ищет цены на перелеты из региона пользователя в город назначения. После добавления веб-скрепера к представлению загрузка занимает около 8 секунд. Мне интересно, как я могу ускорить загрузку представления, возможно, с помощью потоков или другой альтернативы.
views.py
Низко висящий плод - это, вероятно, отсутствие кэширования. Вы должны кэшировать результаты для одного и того же места происхождения/назначения, по крайней мере, в течение некоторого времени. Вы можете сделать это внутри Python, в используемой базе данных или во внешнем кэше, таком как Redis или Memcached. Если вы не хотите возиться с зависимостями, просто создать файл - тоже вариант.
С кэшированием или без него, другой способ улучшить скорость страницы - быстро загрузить пустую страницу, а затем заполнить данные скрепера с помощью Javascript, используя что-то вроде Fetch API.
Вы выполняете много запросов. Вы должны попытаться минимизировать количество выполняемых запросов.
Например, вы можете сделать City.objects.filter(city__in=[v1, v2, etc]) вместо
City.objects.filter(city=v1)
City.objects.filter(city=v2)
etc.
Для более сложных запросов следует проверить .annotate()
https://docs.djangoproject.com/en/4.0/topics/db/aggregation/
Доступ к БД имеет свою стоимость. Это все равно, что звонить каждый раз, когда вам что-то нужно, вместо того, чтобы составить список того, что вам нужно, и попросить об этом за один звонок.