В чем идея спрайтов изображений, как к ним подойти? - PullRequest
7 голосов
/ 25 февраля 2010

Как вы подходите к использованию спрайтов изображений в CSS?

Должен ли я взять все изображения на моем сайте и объединить их в один спрайт изображений? Это действительно так выгодно?

Насколько сложно сохранить эти изображения и изменить их позже?

Ответы [ 4 ]

8 голосов
/ 25 февраля 2010

Должен ли я взять все изображения на моем веб-сайте и объединить их в один спрайт?

Конечно нет. Вы воспринимаете это слишком буквально.

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

  1. Все состояния графической кнопки
  2. Состояния иконок
  3. Все перестановки фона (если только ему не нужно разбивать тайлы двумя способами)

Это действительно так выгодно?

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

Насколько сложно сохранить эти изображения и изменить их позже?

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

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

  • Это 60 КБ для загрузки. Не большие, но на медленных соединениях, это 60 КБ, которые нужно скачать, прежде чем что-либо показать. Если все ваши визуальные ресурсы связаны, это может привести к увеличению времени загрузки.

  • Ваш CSS становится бессмысленной мешаниной из background-position команд. Если вы хотите внести изменения, вы должны вернуться к спрайту и все измерить. Снова и снова и снова.

  • Боже, помилуй твою душу, если тебе нужно увеличить что-то в верхнем левом углу спрайта. Возможно, вы просто добавите новый спрайт ниже текущих.

  • И это может привести к вздутию живота. Действительно, простая загрузка всех этих изображений может привести к загрузке большого количества материала, который некоторые пользователи никогда не увидят. Загрузка неиспользуемых данных вероятно хуже, чем издержки соединения (учитывая, как легко статический контент может обслуживаться несколькими дешевыми серверами или CDN)

Другие примеры намного проще и полезнее (IMO).

5 голосов
/ 25 февраля 2010

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

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

  1. Amazon Sprite
  2. Ebay Sprite
  3. Current.com Sprite (Вау)
  4. Google
0 голосов
/ 25 февраля 2010

Идея состоит в том, чтобы избежать ненужных HTTP-запросов. Это особенно важно, если у вас много маленьких значков (например, для WYSIWYG-редактора, подобного тому, который используется на этом сайте). Если у вас двадцать значков размером 16x16 пикселей, это не будет означать значительную пропускную способность, но это все равно будет означать двадцать дополнительных запросов при каждой загрузке страницы.

Другими кандидатами на спрайты являются состояния кнопок и все, что является чисто декоративным, но является частью макета.

Если вы используете изменения фонового изображения при переворачивании, вы также обнаружите, что вам придется либо предварительно загрузить изображение состояния переворачивания (либо с JS, либо с глупым жестким кодированием), либо вы столкнетесь с некоторой задержкой в ​​качестве браузер запрашивает ранее неиспользуемое изображение. Спрайты могут облегчить это.

Вещи, которые вы, вероятно, не должны делать спрайтами, - это картинки, которые НЕ являются просто графическими элементами (например, графики, иллюстрации, аватары, реклама) или которые сильно изменятся (например, аватары или реклама).

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

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

0 голосов
/ 25 февраля 2010

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

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

  1. меньше HTTP-запросов
  2. нет задержки в ожидании загрузки другого изображения при изменении состояния изображения при наведении

Хотя это зависит от содержимого изображений.

Лично я бы не совмещал несвязанные изображения в одном изображении спрайта, так как считаю, что обслуживание слишком неочевидно. Кроме того, как упоминалось в «Спрайтовать» или «Не спрайтовать» , действительно большие спрайтовые изображения могут занимать довольно много памяти браузера. (Является ли это на самом деле плохо, зависит от контекста.)

...