Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / MVC - Можно ли сделать галерею картинок без кучи запросов? / 25 сообщений из 26, страница 1 из 2
15.10.2013, 12:30
    #38427966
user7320
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MVC - Можно ли сделать галерею картинок без кучи запросов?
Скажем, есть у меня коллекция моделек с полями в виде картинок. Я могу эту коллецию загрузить одним запросом из БД, при этом картинки будут в виде байтовых массивов. Теперь мне нужно сформировать ХТМЛ с этими картинками в представлении. Как?

Везде советуют завести специальный метод в контроллере и возвращать FilePathResult методом Controller.File. Этому Controller.File надо передать байтовый массив. Вроде, всё есть, но как конкретно сформировать представление с группой картинок? Надо же как-то несколько раз FilePathResult вернуть или как?

Ещё советуют каждую картинку грузить отдельным запросом. Т. е. коллеция моих картинок должна представлять из себя не коллецию с конкретным содержимым картинок, а только с их айдишниками, например. Тогда в представлении формируется коллеция УРЛов, которые ведут к специальному методу контроллера, который принимает этот самый айдишник картинки и грузит её отдельным запросом в БД (ну, и отдельным запросом на сервер, как я понимаю).


Так вот, как лучше сделать? Что-то мне не нравится версия с отдельным запросом на каждую картинку.
...
Рейтинг: 0 / 0
15.10.2013, 12:32
    #38427971
Паганель
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MVC - Можно ли сделать галерею картинок без кучи запросов?
user7320Что-то мне не нравится версия с отдельным запросом на каждую картинку.поговорите об этом с Вашим сотрудником, занимающимся СЕО
...
Рейтинг: 0 / 0
15.10.2013, 12:41
    #38427990
товарисчь
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MVC - Можно ли сделать галерею картинок без кучи запросов?
user7320,

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

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

лучший для вас способ, это не изобретать велосипед, а хранить картинки на диске, а в базе данных имена файлов. тогда обо всём позаботиться за вас IIS.
...
Рейтинг: 0 / 0
15.10.2013, 12:44
    #38427995
skyANA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MVC - Можно ли сделать галерею картинок без кучи запросов?
товарисчьна каждую картинку один запрос...+1
...
Рейтинг: 0 / 0
15.10.2013, 13:26
    #38428075
Изопропил
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MVC - Можно ли сделать галерею картинок без кучи запросов?
товарисчьлучший для вас способ, это не изобретать велосипед, а хранить картинки на диске
холивар стартед
...
Рейтинг: 0 / 0
15.10.2013, 13:30
    #38428081
st_st
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MVC - Можно ли сделать галерею картинок без кучи запросов?
Если это часть вёрстки, то пихаются в спрайт и ложатся на диск одним файлом. Если это фото продаваемых товаров (например в интернет-магазине), то каждый файл отдельно.
...
Рейтинг: 0 / 0
15.10.2013, 13:31
    #38428086
Antonariy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MVC - Можно ли сделать галерею картинок без кучи запросов?
user7320Что-то мне не нравится версия с отдельным запросом на каждую картинку.Это стандартный метод, работающий так испокон интернетов, и он самый правильный.
...
Рейтинг: 0 / 0
15.10.2013, 13:57
    #38428158
товарисчь
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MVC - Можно ли сделать галерею картинок без кучи запросов?
Изопропилтоварисчьлучший для вас способ, это не изобретать велосипед, а хранить картинки на диске
холивар стартед

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

http://stackoverflow.com/questions/186062/can-an-asp-net-mvc-controller-return-an-image

MVC: 7.6 milliseconds per photo
Direct: 6.7 milliseconds per photo


проблема заключается в другом.

это поддержка тегов Etag, Last-Modified (устар.) и Cache-Control.
при реализации с помощью контроллера обеспечить эту поддержку придётся вручную.

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

какой вариант лучше/хуже решается исходя из возможностей и потребностей. я посчитал, что для ТС лучше файлы (меньше заморочек).
...
Рейтинг: 0 / 0
15.10.2013, 14:03
    #38428174
ShSerge
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MVC - Можно ли сделать галерею картинок без кучи запросов?
На каждую картинку - свой запрос.
Давайте не спорить. Это - проверено.
Насчёт спрайтов - они не нужны, если каждая картинка хранится в базе. Даже, если картинки хранится в ФС, один хрен, спрайты не нужны. Хотя бы по той причине, что картинки с разными урлами загружаются в разных потоках.
...
Рейтинг: 0 / 0
15.10.2013, 14:12
    #38428194
Antonariy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MVC - Можно ли сделать галерею картинок без кучи запросов?
ShSergeДавайте не спорить.Банхаммером их!
...
Рейтинг: 0 / 0
15.10.2013, 14:16
    #38428212
ShSerge
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MVC - Можно ли сделать галерею картинок без кучи запросов?
AntonariyShSergeДавайте не спорить.Банхаммером их!
Уже двоих прибил. Хватит на сегодня.
...
Рейтинг: 0 / 0
15.10.2013, 15:25
    #38428356
user7320
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MVC - Можно ли сделать галерею картинок без кучи запросов?
товарисчьИзопропилпропущено...

холивар стартед

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

http://stackoverflow.com/questions/186062/can-an-asp-net-mvc-controller-return-an-image

MVC: 7.6 milliseconds per photo
Direct: 6.7 milliseconds per photo


проблема заключается в другом.

это поддержка тегов Etag, Last-Modified (устар.) и Cache-Control.
при реализации с помощью контроллера обеспечить эту поддержку придётся вручную.

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

какой вариант лучше/хуже решается исходя из возможностей и потребностей. я посчитал, что для ТС лучше файлы (меньше заморочек).
Я уже второй раз реализовал отдачу через FilePathResult (который принимает байтовый массив) и мне проще именно так. Картинки в БД храню сразу в полном виде и в виде миниатюры. На всякий случай написал функцию на WIC (по примеру, похожему на ), которая позволит вернуть миниатюру в нужном размере (ей же эти миниатюры в БД и создавал). Но ей пользоваться при регулярной отдаче картинок не хочу, т. к. подозреваю, что если всякий будет каждый раз разного размера миниатюры генерить, то сервер сильно нагрузит.

Вобщем, если при прорисовке галареи на сервер идёт штук 100 запросов только на миниатюры, то это нормально? Это же сто ОТДЕЛЬНЫХ запросов к БД.
...
Рейтинг: 0 / 0
15.10.2013, 15:26
    #38428359
user7320
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MVC - Можно ли сделать галерею картинок без кучи запросов?
Паганельuser7320Что-то мне не нравится версия с отдельным запросом на каждую картинку.поговорите об этом с Вашим сотрудником, занимающимся СЕО
Я тут сам по себе. И я не разбираюсь в СЕО. Я и прошу, чтобы мне подсказали - потому что не разбираюсь. Если бы разбирался, я бы давал советы, а не просил. ))
...
Рейтинг: 0 / 0
15.10.2013, 15:29
    #38428363
Паганель
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MVC - Можно ли сделать галерею картинок без кучи запросов?
user7320Я тут сам по себе. И я не разбираюсь в СЕО. Я и прошу, чтобы мне подсказалия тоже
но я думал, что у Вас есть сотрудник, который разбирается
жаль что нету
...
Рейтинг: 0 / 0
15.10.2013, 15:38
    #38428379
товарисчь
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MVC - Можно ли сделать галерею картинок без кучи запросов?
user7320Я уже второй раз реализовал отдачу через FilePathResult (который принимает байтовый массив) и мне проще именно так. Картинки в БД храню сразу в полном виде и в виде миниатюры. На всякий случай написал функцию на WIC (по примеру, похожему на ), которая позволит вернуть миниатюру в нужном размере (ей же эти миниатюры в БД и создавал). Но ей пользоваться при регулярной отдаче картинок не хочу, т. к. подозреваю, что если всякий будет каждый раз разного размера миниатюры генерить, то сервер сильно нагрузит.

Вобщем, если при прорисовке галареи на сервер идёт штук 100 запросов только на миниатюры, то это нормально? Это же сто ОТДЕЛЬНЫХ запросов к БД.

кеширование решает эту проблему на раз-два.

1. подготовленные миниатюры надо кешировать на диске и отдавать при их наличии с диска вместо того, чтобы создавать ещё раз миниатюру
2. обратите внимание ещё раз на обработку тегов ETag / If-None-Match
3. Cache-Control (public)

и проблем не будет, хоть 1000000 запросов.

П.С. могу порекомендовать набирающую обороты либу для обработки изображений ImageProcessor
...
Рейтинг: 0 / 0
15.10.2013, 15:44
    #38428392
Где-то в степи
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MVC - Можно ли сделать галерею картинок без кучи запросов?
товарисчь, парень конечно старается, атрибутом кешированя кабы не сложно, а вот доехать с 404 до 304 тут время надо...
можно грузить не все фото, а по мере прокрутки - или что там у нас, многие дальше трех щелчков по галерее не делают, а бредут дальше..
...
Рейтинг: 0 / 0
15.10.2013, 15:49
    #38428400
товарисчь
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MVC - Можно ли сделать галерею картинок без кучи запросов?
Где-то в степи,

браузер не делает больше определенного количества запросов одновременно. бояться нечего :)
...
Рейтинг: 0 / 0
15.10.2013, 16:04
    #38428440
Где-то в степи
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MVC - Можно ли сделать галерею картинок без кучи запросов?
я всегда балдел от этой штуки http://galleria.io/themes/
...
Рейтинг: 0 / 0
15.10.2013, 16:06
    #38428443
st_st
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MVC - Можно ли сделать галерею картинок без кучи запросов?
url-ы картинок из базы считал, браузеру отдал и забыл. Превью обычно генерятся при аплоаде и раскидываются куда надо. Сами картинки отдадутся напрямую веб-сервером с диска, хоть их 100, хоть 200, а если развёрнута CDN (хотя можно с контроллером ентим бегать и пихать его на все серваки), Linux + Nginx, так вообще влёт, без всяких контроллеров, фиголлеров и прочих ненужных тормозящих прокладок. Защиту от хотлинкинга можно и в конфиге сервера настроить. Вот если картинки только авторизованым юзерам отдавать, тогда нужно код городить с Etag-ами и прочим, а так х.з. И 100 картинок за раз не много ли юзеру? Загрузили несколько, перелестнул - грузим вторую часть и т.д.
...
Рейтинг: 0 / 0
15.10.2013, 16:07
    #38428444
user7320
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MVC - Можно ли сделать галерею картинок без кучи запросов?
товарисчьuser7320Я уже второй раз реализовал отдачу через FilePathResult (который принимает байтовый массив) и мне проще именно так. Картинки в БД храню сразу в полном виде и в виде миниатюры. На всякий случай написал функцию на WIC (по примеру, похожему на ), которая позволит вернуть миниатюру в нужном размере (ей же эти миниатюры в БД и создавал). Но ей пользоваться при регулярной отдаче картинок не хочу, т. к. подозреваю, что если всякий будет каждый раз разного размера миниатюры генерить, то сервер сильно нагрузит.

Вобщем, если при прорисовке галареи на сервер идёт штук 100 запросов только на миниатюры, то это нормально? Это же сто ОТДЕЛЬНЫХ запросов к БД.

кеширование решает эту проблему на раз-два.

1. подготовленные миниатюры надо кешировать на диске и отдавать при их наличии с диска вместо того, чтобы создавать ещё раз миниатюру
2. обратите внимание ещё раз на обработку тегов ETag / If-None-Match
3. Cache-Control (public)

и проблем не будет, хоть 1000000 запросов.

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

Про либу - глянул на пример миниатюры (см. вложение) в увеличенном виде - заметил артефакт на краю изображения. У меня при использовании WIC такой же. Если рендерить в WPF и задавать при этом SnapsToDevicePixels, артефакт пропадает. Вобщем, у меня ощущение, что моя либа не хуже. ))
...
Рейтинг: 0 / 0
15.10.2013, 16:33
    #38428493
товарисчь
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MVC - Можно ли сделать галерею картинок без кучи запросов?
user7320Про кеширование спасибо.

Про либу - глянул на пример миниатюры (см. вложение) в увеличенном виде - заметил артефакт на краю изображения. У меня при использовании WIC такой же. Если рендерить в WPF и задавать при этом SnapsToDevicePixels, артефакт пропадает. Вобщем, у меня ощущение, что моя либа не хуже. ))

эта либа использует System.Drawing, так что болеет некоторыми её недостатками.

решения есть 2 штуки:

1. ресайзить на 2px больше, потом кропить.
2. написать Issue , как я уже сказал либа очень быстро развивается и активно набирает обороты. автор реагирует быстро.

но речь ведь не об этом :)
...
Рейтинг: 0 / 0
15.10.2013, 16:43
    #38428506
товарисчь
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MVC - Можно ли сделать галерею картинок без кучи запросов?
st_sturl-ы картинок из базы считал, браузеру отдал и забыл. Превью обычно генерятся при аплоаде и раскидываются куда надо. Сами картинки отдадутся напрямую веб-сервером с диска, хоть их 100, хоть 200, а если развёрнута CDN (хотя можно с контроллером ентим бегать и пихать его на все серваки), Linux + Nginx, так вообще влёт, без всяких контроллеров, фиголлеров и прочих ненужных тормозящих прокладок. Защиту от хотлинкинга можно и в конфиге сервера настроить. Вот если картинки только авторизованым юзерам отдавать, тогда нужно код городить с Etag-ами и прочим, а так х.з. И 100 картинок за раз не много ли юзеру? Загрузили несколько, перелестнул - грузим вторую часть и т.д.

контролировать генерацию превью при аплоаде — имхо, нарастающий ком проблем при сопровождении и разработке. достаточно хранить всего одну единственную копию оригинального изображения. а отдавать в нужном качестве/размере, преобразовывая и складывая в кеш, такое решение хорошо масштабируется. кеш можно в любой момент грохнуть без сожаления и насоздавать других миниатюр по запросу, если вдруг дизайнеру приспичило срочно увеличить все миниатюрки на 10px по ширине. и ему плевать.
...
Рейтинг: 0 / 0
15.10.2013, 17:34
    #38428579
st_st
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MVC - Можно ли сделать галерею картинок без кучи запросов?
Главное есть оригинал изображения. И если дизайнер поменял размеры на 10px, мы также можем пройтись по базе, взять по url оригиналы и нагенерить новых превью (тут компьютер желательно помощнее). Размеры устаканиваются обычно ещё на этапе создания проекта и далее меняются редко. В работе видел оба варианта, один с кэшем (пришлось делать из-за динамических размеров), другой без, разницы особо не заметно, но мне как-то ближе вариант использования только веб-сервера для отдачи картинок без нагромождения дополнительного кода. Вариант с кэшем кстати каспер забанил потом после обновления, рисунки повырезал, непонравился ему chunked, пришлось content-length выдавать.
...
Рейтинг: 0 / 0
15.10.2013, 17:56
    #38428612
товарисчь
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MVC - Можно ли сделать галерею картинок без кучи запросов?
st_st,

знаю одно, сомнительно-полезное на практике, применение для chunked изображений: организация долговременного коннекта на старых браузерах, для перекидывания через бесконечный gif всяких пакетиков :) чаты, там всякие делать, активные уведомления...

или прокидывать большие зипы/рары/прон под видом jpg для обхода файерволлов. может поэтому каспер и режет?
...
Рейтинг: 0 / 0
16.10.2013, 03:50
    #38429056
st_st
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MVC - Можно ли сделать галерею картинок без кучи запросов?
Всё было проще, изображения просто считывались и отдавались как есть (без возни с хедерами респонса, за исключением content-type), chunked веб-сервер подпихивал сам автоматом. Ну а каспер видит, с сервера летит photo.jpg, размера нет (content-length), какими-то чанками, ну и резал его, на форумах должна встречаться похожая проблема. Лечилось просто выставлением content-length и тогда chunked сервер уже не подпихивал.
...
Рейтинг: 0 / 0
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / MVC - Можно ли сделать галерею картинок без кучи запросов? / 25 сообщений из 26, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]