2013-08-14 1 views
0

Я создаю приложение Asp.Net MVC4 с страницами продуктов. Я пришел к библиотеке ImageResizer для обработки и обслуживания изображений. Моя страница имеет миниатюры jpg 160x160px в размерах и размером 3 ~ 5 КБ каждый. Насколько я понимаю, используя библиотеку ImageResizer, я мог просто загрузить оригинальное изображение большого продукта 600 x 600px & 10 ~ 20KB и изменить размер его на лету до размера миниатюры, когда посетитель запрашивает страницу. Что-то вроде:ImageResizer .net для нескольких проблем с изображениями продуктов?

<img src="@Url.Content("~/images/imagename?width=160&height=160")" alt=""> 

Что я понимаю прекрасно подходит для пары изображений, но моя страница продукта состоит из 20 до 100 продукта JPG уникальных миниатюр (в зависимости от размера страницы). Должна ли производительность повредить обработкой на лету 20-100 фотографий каждый раз? Кто-нибудь сталкивался с похожим сценарием? Я всегда мог вернуться назад и генерировать 2 разных изображения (миниатюры и большие) во время процесса загрузки, но я очень извиняюсь, если бы мог уйти с одним изображением на продукт и динамическим изменением размера. Когда я говорю о производительности, я имею в виду, что что-то выше, чем 0,5 - 1 с, дополнительное время отклика - это не-нет для меня.

ответ

1

В документации упоминается, что есть кэширование плагин, который улучшает производительность по 100-10000X:

Каждый (нет, выходной кэш общественной стороне сайта необходимо кэширования диска для их динамически изменения размеров изображений ASP.NET в не будет работать). Этот модуль работает очень быстро, но для декодирования исходного изображения требуется большое количество непрерывной памяти (обычно 50-100 МБ). Поскольку для него требуется непрерывная, не подвергнутая постраничной, не фрагментированной ОЗУ, она не может использоваться (D) DOS-атака, но это означает, что существует ограничение на основе ОЗУ, на сколько можно обрабатывать запросы обработки одновременно , Плагин DiskCache улучшает пропускную способность 100-10 000X, делегируя обслуживание кэшированных файлов обратно в IIS и используя структуру диска хэш-дерева. Он легко масштабируется до 100 000 вариантов и может использоваться с миллионами изображений. Это часть выпуска Performance, стоимость которого составляет 249 долларов. Плагин DiskCache требует использования API URL (читайте почему).

http://imageresizing.net/plugins/diskcache
http://imageresizing.net/docs/basics

+0

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

0

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

Вы можете использовать плагин для кеширования для ImageResizer или вручную записать в файл с использованием определенного имени файла, например: product_154_180x180.jpg где 154 - идентификатор продукта, а 180 - ширина и высота, а затем проверьте, существует ли он, когда вы хотите отобразить его.

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

Этот последний метод также позволит избежать вызова ImageResizer, что избавит вас от некоторой вычислительной мощности.

+0

Я не думаю, что вы рассмотрели проблемы параллелизма, присущие вашему предлагаемому решению кэширования DIY. У вас будет огромное количество тупиковых потоков и файлов с сиротскими ручками, если вы попытаетесь сделать что-то в этом роде. –