Мой подход
Я написал довольно простое приложение для галереи в php некоторое время назад, и вот как оно работает:
Изображения хранятся в папке с подпапками, представляющими альбомы (и подальбомы).Они загружаются через FTP, и веб-сервер имеет только права на чтение.
Для каждого изображения существует три версии:
- полная (оригинал)
- «средний» (максимум 1024x768px)
- «большой» (максимум 250x250px)
Все запросы браузера на изображения обслуживаются php, а не -еще существующие версии создаются на лету.Фактические данные подаются через X-Sendfile, но это деталь реализации.
Я храню меньшие версии в отдельных каталогах.Когда указан путь к исходному изображению, тривиально найти соответствующие уменьшенные файлы (и проверить время существования и изменения).
Мысли о вашей проблеме
Масштабирование изображений с использованием HTML / CSSсчитается плохой практикой по двум простым причинам: если вы увеличиваете масштаб, у вас есть размытое изображение.Если вы уменьшаете масштаб, вы теряете пропускную способность и замедляете свою страницу без веской причины.Так что не делайте этого.
Должна быть возможность определить довольно небольшой набор требуемых версий каждого файла (например, тех, которые используются в макете, как в моем случае).В зависимости от размера и требований вашего проекта есть несколько возможностей для создания этих версий:
- на лету: генерируйте / обновляйте их, когда они запрашиваются
- во время загрузки:пусть подпрограмма, вызываемая во время процесса загрузки, выполняет работу
- в фоновом режиме: подпрограмма загрузки добавляет задание в очередь, над которой работают в фоновом режиме (возможно, наиболее масштабируемую, но также довольно сложную).реализовать и развернуть)
Уменьшение больших изображений - довольно медленная операция (обычно занимает несколько секунд).Возможно, вы захотите ограничить его каким-либо образом, чтобы предотвратить злоупотребление / DoS.Также ограничьте размеры и размер файла.JPG в 100 Мп (или даже больше) в виде простого белого (или любого цвета) может быть очень маленьким при сжатии, но при масштабировании будет использовать очень много оперативной памяти.Кроме того, большие PNG-файлы очень долго распаковываются (и даже больше, чтобы сжиматься).
Для небольшого веб-сайта не имеет значения, какой подход вы выберете.То, что работает (даже если не масштабируется), подойдет.Если вы планируете получать хороший объем трафика и постоянный поток загрузок, тогда выбирайте мудро и тщательно оценивайте.