Я немного поработал над этой проблемой и нашел 3 основных способа сделать это:
- Создание миниатюрных изображений в точке загрузки в качестве фонового процесса.
- Создание изображений по запросу с помощью основного приложения
- Создание изображений по запросу с использованием URL-адреса в качестве API
Каждый подход имеет свои плюсы и минусы.
- Этот подход является наиболее ограничительным, вы должны заранее знать все варианты использования и размеры миниатюр, чтобы их можно было генерировать сразу после загрузки.Основным преимуществом является то, что изображения могут эффективно обслуживаться с использованием сервера, такого как nginx, и они аналогичны любым другим статическим ресурсам.
- Django имеет библиотеку sorl-thumbnail, которая предоставляет тег шаблона для создания миниатюр всех видов.как и когда они нужны.Он использует быстрый ключ / хранилище значений для отслеживания того, какие миниатюры были сгенерированы, и автоматически делает недействительными устаревшие сгенерированные изображения, если обнаруживает, что исходное изображение было изменено.Затем тег шаблона возвращает URL для сгенерированного изображения, которое может быть передано непосредственно из nginx без прохождения слоя сценариев.Более гибкий, чем 1, но вы не можете (например) создать URL-адрес изображения с помощью JavaScript и ожидать, что он будет существовать, это должно быть сделано с помощью внутреннего кода или шаблонов веб-сайта.
- Полностью динамичный и гибкий,Вы можете получить любую версию изображения, которую хотите, просто изменив URL, Amazon использует этот метод, как и все эти веб-сайты для создания изображений-заполнителей.Может генерировать URL в JavaScript и делать все, что угодно.Самому веб-сайту не требуется знание уровня миниатюр, за исключением нескольких вспомогательных методов для создания URL-адресов для вас.НО, это, очевидно, самый ресурсоемкий способ работы, и вам нужно убедиться, что ваша архитектура справится с нагрузкой.Вам нужно использовать все приемы в книге, чтобы своевременно аннулировать кэши, избегать ненужных попаданий в скрипт изменения размера и т. Д.
Я большой поклонник 3-го способа работы, янапример, создание изображений полностью изолированным от функций моего основного веб-сайта, и мне нравится значительная гибкость, но вам нужно знать, что вы делаете, когда речь заходит о настройке серверов для его обработки.