Должен ли я генерировать каждую миниатюру динамически каждый раз, когда она запрашивается, или сохранять их при загрузке изображения?

Проблема. Я хочу настроить функцию загрузки изображений на своем веб-сайте. Но я хотел показать как оригинальное изображение, так и небольшое уменьшенное изображение.

Выбор – в каком направлении лучше – создать отдельное изображение (уменьшенное изображение) в каталоге при загрузке изображения или показать меньшую версию, уменьшив ее высоту и ширину в фиксированном соотношении каждый раз, когда изображение запрашивается?

Как я делаю это в настоящее время – более поздний звук звучит лучше для меня, потому что он не будет занимать много места на диске, но он должен изменить размер изображения снова и снова. Какой из них лучше?

Это общий вопрос для веб-приложения, а не конкретный язык.

Любая идея, как это делают facebook или google?

Вопрос. Мой вопрос заключается в том, как создавать эскизы и показывать их на веб-сайте – создавая копию исходного изображения с меньшим размером или генерируя миниатюру динамически каждый раз, когда она запрашивается.

Создание миниатюры при загрузке – почти всегда лучший вариант. Если хранилище вызывает беспокойство, вы можете конвертировать их по запросу и затем кэшировать результат в хранилище. Если его запрос еще раз до истечения срока действия кэша, преобразование не потребуется.

Хранение часто довольно дешево, поэтому я бы, вероятно, не пошел на эту дополнительную сложность.

Просто создайте миниатюру и сохраните на диск. Место на жестком диске очень дешево. 70 фунтов стерлингов для пары туберкулеза.

Создание миниатюры – лучший вариант, и это не требует большого дискового пространства. При открытии ваших страниц ваш клиент также будет загружать меньший размер. преобразование изображения по запросу будет стоить больше времени для загрузки вашей страницы;)

Если вы посмотрите на большинство CMS с этой встроенной функциональностью, они почти всегда создают уменьшенное изображение изображения при загрузке и хранят его на сервере.

Это восходит к возрасту, говорящему «делай то, что делает Google», но с CMS.

«Лучше» зависит от установленных вами критериев.

Для большинства приложений дисковое пространство не является проблемой – и если сохранение миниатюры является проблемой, сохранение оригинала должно быть серьезной проблемой – приличная цифровая фотокамера будет работать со многими мегабайтами, тогда как миниатюра не должна превышать 50 КБ.

Полоса пропускания и производительность (как воспринимается клиентом), как правило, представляют большую проблему. Если у вас много людей, просматривающих галерею миниатюр изображений, то 50-килобайтные миниатюры будут значительно быстрее (и дешевле в полосе пропускания), чем при использовании изображений с высоким разрешением в мегабайтах.

Кроме того, при обслуживании эскизов по URL-адресу, например <img src="images/thumbnail/foobar.jpg"> и настройке соответствующих заголовков кеша, вы должны получить много кэширования ниже по потоку – это менее вероятно, если вы подаете изображение как <img src="thumbnail.php?image=image/foobar.jpg> потому что кеши относятся к querystrings довольно консервативно.

Я работал на веб-сайте, который управлял сотнями тысяч изображений продуктов; мы создали ImageMagick для автоматического создания эскизов. В зависимости от вашей настройки, это может иметь смысл сделать это, когда сначала будет запрошена эскиз, а не когда файл будет загружен, потому что конвертация может быть довольно ресурсоемкой, а делать это при загрузке займет больше времени, чем мы хотели подождать , Современное оборудование может сделать это без проблем.

Также возникает вопрос о сохранении эскизов в синхронизации с оригиналами – если пользователь загружает новое изображение, вы должны убедиться, что обновили эскиз; если оригинал удален, вы также должны удалить миниатюру.