Лучший подход к показу изображения по умолчанию - PullRequest
1 голос
/ 15 ноября 2010

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

Ответы [ 4 ]

0 голосов
/ 15 ноября 2010

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

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

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

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

0 голосов
/ 15 ноября 2010

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

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

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

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

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

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

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

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

0 голосов
/ 15 ноября 2010

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

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

0 голосов
/ 15 ноября 2010

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...