Bezdepbonusu7Программирование: статьи и ответы

Вопрос

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

Автор вопроса: ShuklaSannidhyaОтветов: 5

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

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

Как я это делаю сейчас? Как вы думаете, какой из них лучше?

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

Есть идеи, как это сделать в Facebook или Google?

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

imagephpweb-applicationsuploadthumbnails

Ответы

Ответ 1 · рейтинг 6 · datasage

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

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

Ответ 2 · рейтинг 2 · Ed Heal

Просто создайте уменьшенную версию и сохраните на диск. Место на жестком диске очень дешевое. 70 фунтов за пару ТБ.

Ответ 3 · рейтинг 1 · Hendyanto

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

Ответ 4 · рейтинг 1 · Millard

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

Это восходит к старинной поговорке "делай то, что делает Google", но с CMS.

Ответ 5 · рейтинг 1 · Neville Kuyt

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

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

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

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

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

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

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы