Лучшая практика при использовании folium на django
Я создаю приложение с django, которое отображает карту высших проголосовавших элементов.
Я не опытный веб-сайт, и я задаюсь вопросом, где и когда и где должна строиться их карта. (например, эта строка → )
map_osm.create_map(path='osm.html')
В настоящее время я помещаю в свой файл views.py и строю карту каждый раз, когда пользователь ее просматривает, возникает вопрос: не создаст ли слишком много служебных вычислений для сервера?
Я подумал о том, чтобы обновить его, как и каждый х голосов, или сохранить модель, которая будет ею управлять.
Какова наилучшая практика в подобной ситуации?
Ответы
Ответ 1
Амит. Что касается фолиевых и строительных карт для пользователей, да, это может сделать тяжелую работу для сервера, когда многие пользователи хотят вычислить.
Есть решения для этого:
- Кэширование с помощью Redis или Memcached (у Django есть батареи). На этом этапе вы можете установить срок службы кэша ~ несколько секунд до нескольких часов, если координаты совпадают. Django обеспечивает кэширование изображений, кэширование шаблонов или другие.
- Сохранить результат сопоставления с db, поэтому, если пользователь вычисляет такие же cudrinates, как вчера - Django будет принимать результат из db и быстрее показывать шаблон.
- Если ничего не соответствует вашим требованиям - просто сделайте django быстрее, выключите неиспользуемые средние, используйте gunicorn\uwsgi для запуска и развертывания. Найдите на веб-сервере больше ОЗУ и процессорных ядер (при развертывании).
- Вы можете попробовать профилировать свой проект, чтобы вы могли найти, где самая вычислительная часть вашего проекта. Когда вы нашли - сделайте это быстрее.
Ответ 2
Кэширование - лучший способ, но, поскольку вы не опытный разработчик, я дам вам альтернативное решение.
Кажется, что вы пересчитываете карту каждый раз, когда пользователь посещает этот раздел вашего сайта. Одним из решений является прямое подключение к html файлу и обновление файла с помощью задачи CRON или таймера Python каждые 30 минут (или того, что вам нужно). Таким образом, вы будете вычислять только каждые полчаса для всех ваших пользователей.