Ресайз изображений

В общем целом, существует два подхода к ресайзу изображений. И оба имеют как плюсы, так и минусы.

Первый вариант. Ресайз изображений происходит в момент обращения посетителя.

Плюсы:
1. При разработке админки не задумываемся о размерах, дизайне и храним только приведенный к достаточному размеру оригинал.
2. Меньшее занимаемое миниатюрами дисковое пространство. Автоматически освобождаем место от миниатюр, к которым долго не было обращения.
3. При смене дизайна сайта ресайз со временем произойдет сам по себе. Старые миниатюры со временем удалятся (п. 2).

Минусы:
1. Вероятность превышения пиковой нагрузки на сервера в некоторых случаях (например, зашел робот поиска картинок).

Второй вариант. Создание всех необходимых размеров в момент загрузки изображения контент-менеджером.

Плюсы:
1. Прогнозируемая нагрузка на процессор.
2. Прогнозируемое свободное место на диске.

Минусы:
1. Ручная работа по созданию механизмов удаления старых и генерации новых миниатюр при смене дизайна или требований.

Вердикт.

Мне ближе первый подход. Еще в 2006 при разработке прошлой Всей Уфы я понял все его прелести. Тогда этой рутиной занималась связка PHP + mod_rewrite.

Изображение запрашивается у скрипта. Если файл существует в кеше, то отдаем из кеша. Нет — генерируем и сохраняем в кеш. Так как фактически изображение запрашивается у скрипта, то проблема кеширования изображений в браузере лежит на плечах скрипта. Ключевые слова: ETAG, Last-modified и функция PHP apache_request_headers, чтобы узнать версию файла в кеше пользователя (которая, кстати, естественным образом не работает в режиме CGI).

На хабре не так давно был репост статьи про ресайз изображений на лету. Там пример использования nginx с модулем ngx_http_image_filter_module, что более производительно и проще.

А вы что предпочитаете?
  • 0
  • 15 декабря 2009, 02:06
  • akhmetov

Комментарии (1)

RSS свернуть / развернуть
+
0
Используем оба способа, в «обычных» так сказать корпоративных сайтах второй, сразу превью делается, корректируется большое изображение, всё это через ImageMagick (Image::Magick либа в perl), последнее время так как хостеры вредничают добавил возможность использовать GD, но качество заметно хуже и надо ресэмплить и т.п.

Ресайз и выдачу скриптом на лету мы делали у сайта МировоеФото так как приходилось выдавать по 5-6 разных превью с кучей водяных знаков и контролировать доступ. Но это в первый раз, потом уже гененировался кэш и он в другой раз отдавался скриптом. Не люблю такой подход, уж больно зря силы PHP тут использовались :)

На одном другом сайте ипользуется подход выдачи контента маленькими хэлперами со стороны шаблона дизайна. Который работает примерно по логике
if( !file_exist($image) ){
    make_preview($image, $params);
}
echo <<<DOT
<img src="$image" alt="" />
DOT;


В духе, что когда пользователь получит html код уже все изображения будут указывать на статичные ресайзы картинок, одна проблема, что постоянная работа по проверке изображений, хоть и кэшируется файловой системой, но нагрузка всё же существует, причем в двойном виде, как например еще и проверка от веб-сервера и т.п.
avatar

MpaK

  • 16 декабря 2009, 09:44

Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.