В моем веб-приложении я использую MongoDB GridFS для хранения загруженных пользователем изображений.
Остальная часть сайта управляется MySQL.
В таблице фотографий (в mysql) у меня есть три поля для хранения MongoId файлового объекта.
Поэтому я храню три версии изображения. Маленький, средний и большой.
Мой вопрос: иногда мне нужно использовать миниатюру меньше, чем «маленькую» версию изображения (то есть в окне виджетов, аватарах сообщений и т. Д.), Или мне нужно будет использовать небольшую меньшую версию среднего изображения ,
Поэтому мой вопрос: лучше ли было бы сохранить одно изображение в системе GridFS, а затем иметь одно поле в таблице фотографий, хранящее MongoID, а затем создать сценарий, который изменяет размер изображения «на лету» (например, http: // localhost / image / fetch / {mongoid}? resize = 50
В противном случае, в моем db мне понадобятся thumbnail_50, thumbnail_100, medium_300, medium_400 и т. Д. И т. Д.
Каковы были бы последствия смены маршрута изменения размера на лету? это плохо или хорошая идея? Что бы вы сделали?
Благодарю.
Изменение размера «на лету» приведет к гораздо большему количеству загрузки процессора на вашем сервере, чем изменение размера до нескольких размеров один раз и сохранение результатов. С другой стороны, изменение размера заблаговременно может привести к большему набору данных, которые будут храниться в GridFS. Другими словами, это компромисс.
Вы можете рассмотреть гибридный подход, при котором вы изменяете размер на лету, но сохраните результаты в GridFS, чтобы вам не нужно было изменять размер одного изображения до заданного размера более одного раза.
Вы также должны знать, что HTML и CSS позволяют различные параметры управления отображаемым размером изображения. Например:
<img src="/path/to/image.jpg" width="50"/>
В результате изображение будет масштабироваться пропорционально ширине 50 пикселей (в любом случае, в большинстве современных браузеров). Вы также можете использовать свойства CSS width
и max-width
для управления размером изображения.
Для меня и не зная об объеме или размере файлов, которые вы будете хранить, я бы, вероятно, изменил размер при добавлении изображений – другими словами, один раз нажмите скорость страницы и загрузку процессора, а затем выполните различные размеры из GridFS, используя max-width
для управления размером экрана, если в одном конкретном случае требуется немного другой размер.