2010-11-14 15 views
1

Ищете информацию - я создаю сайт catolog, который включает в себя список продуктов. Каждый продукт имеет изображение, сохраненное на жестком диске на сервере. Если изображение не существует, я хочу показать изображение по умолчанию. Каков наилучший способ сделать это. Я использую C# и рассматриваю проверку на стороне сервера, если изображение существует. Но поскольку некоторые страницы могут иметь 50-60 изображений, это замедлит страницу. Я использую jquery на стороне клиента. Какие-нибудь советы по этому поводу?Лучший подход к отображению изображения по умолчанию

ответ

0

Это отличный вопрос, поскольку возникновение ситуации возникает во многих обстоятельствах. Я вижу несколько вариантов:

1) проверять наличие изображения при визуализации каталога и использовать ссылку на изображение по умолчанию для элементов, которые не имеют изображений,

2) проверять наличие изображения в изображении контроллер и вернуть изображение по умолчанию, если нет в наличии

3) поместить изображения встроенный в документ с помощью URL-адреса данных

основным фактором здесь является возможность кэширования.

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

Вариант (2) облегчает кэширование индексной страницы, но каждое изображение должно отправить запрос на сервер. Опять же, вы можете использовать агрессивное кэширование, чтобы избежать тех же запросов во второй раз, когда страница отображается.

Вариант (3) лучше всего, если ваши изображения малы и если страница каталога относительно статична. Обязательно используйте кеширование на стороне сервера, хотя при создании страницы нужно уменьшить нагрузку на файловую систему/базу данных.

0

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

Или вы можете сохранить информацию о том, существует ли образ продукта в вашей базе данных. Затем вы предварительно заполняете базу данных информацией, и никакие проверки диска не нужны.

0

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

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

+0

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

+0

Да, вы, вероятно, правы, но я не совсем согласен с логикой. Возвращение однобитового флага по сравнению с 30-битным URL-адресом на самом деле не будет сильно влиять на скорость, хотя это немного увеличит размер вашей базы данных (более заметным с массивными базами данных). Я согласен с тем, что он чище, когда/если вы хотите изменить URL-адрес изображения по умолчанию, но это совсем не сложно: update 'table' set 'imageURL' = replace (imageURL, 'defaultURL', 'newDefaultURL'); – Jeff

+0

Джефф, размер базы данных увеличивает дисковый ввод-вывод и, следовательно, снижает производительность (учитывая, что дисковый ввод-вывод, вероятно, отвечает за «медленные» системы в большинстве случаев. Затем у вас также есть избыточные данные в вашей таблице. я думаю, что мои предложения были направлены на то, как это сделать, а не «это возможно в этих 10 путях». То, что вы предлагаете, «уверенно», но я не буду :) –

0

Как ваш код jQuery знает имя изображения?

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

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

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

Смежные вопросы