Прошлой статьёй я открыл цикл под названием «Ускоряем загрузку страниц сайта», призванный увеличить не только удобство пользователей, но и повысить позицию в выдаче поисковика.
Напомню, что во многих странах широкополосный интернет ещё является редкостью. Один человек посмотрел статистику в Google Analytics и сказал мне: «dial-up’ом пользуются всего 2%, зачем оптимизировать страницы?» Можете взглянуть в свою статистику и задуматься над тем, какая скорость у Unknown соединения.
Могу предложить вам ещё одну статистику, показывающую наиболее распространённую скорость доступа в интернет городов и федеральных округов России (москвичам открою страшную тайну: жизнь за МКАДом есть).
Теперь, когда я вас убедил, что оптимизировать страницы надо, вернёмся к теме сегодняшней статьи: оптимизация изображений. Почему начнём мы именно с оптимизации изображений? Всё просто: оптимизировать изображения легко, а эффект от этого очень хороший.
Для начала, взглянем на нашу страницу, не имеет значения статическая она или шаблон: она состоит из одного-двух больших изображений (шапка, баннер), и нескольких десятков маленьких (кнопки, элементы оформления).
Итак: как оптимизировать изображения?
1. Мелкие объекты необходимо делать в PNG.
Это, казалось бы, простой совет, который выполняют совсем не многие. Если вы с детства любите GIF– можете использовать его, но я сомневаюсь, что вы сможете привести хоть одно доказательство в пользу последнего, не считая того, что очень древние браузеры не поддерживают PNG. Я предлагаю вам взглянуть на изображения.
Как можно заметить, изображение формата PNG меньше его аналога GIF в 1.5 раза.
О формате PNG рекомендую прочитать эту статью.
Следует помнить, что PNG лучше сжимает изображения с большими площадями одного цвета. К примеру, квадрат, залитый одним цветом, будет лучше сжат, чем квадрат с пусть даже небольшим количеством шумов.
2. Ещё больше сжать PNG.
В интернете можно найти огромное количество программ для сжатия PNG. Из кроссплатформенных можно использовать OptPNG, с графическим интерфейсом – PngOptimizer или PNGout.
3. Удалить изображения под альфа-каналом.
Дело в том, что информация о прозрачности содержится отдельным слоем в PNG, и, иногда, в том месте, где мы думаем, что ничего нет, будет находиться изображение, тоже занимающее место. Подробнее можно почитать в этой статье.
4. Крупные объекты и фотографии конвертировать в JPG.
Формат JPG позволяет сжимать большие изображения с потерей качества. В случае если мы работаем с фотографией, или, к примеру, шапкой сайта, изображение, сохранённое без потери качества, будет очень большим. Придётся искать компромисс между качеством и размером.
5. Необходимо сжимать JPG.
Сегодня существует много программ, использующих разные алгоритмы оптимизации. Я не буду останавливаться на их обзоре, это материал для отдельной статьи, но напомню, что оценка качества у разных программ разная, поэтому очень важно не быть обманутыми разработчиками.
Photoshop, между прочим, отлично сжимает JPG и многие программы стараются равняться на его систему оценки качества изображений. Хочу обратить ваше внимание на тот факт, что при качестве ниже 6 (51) по шкале оценки Photoshop, включается дополнительный фильтр, поэтому изображения с большим количеством мелких деталей следует оптимизировать с качеством равным или выше 6 (51).
6. Убрать из JPG всё лишнее.
Обычно файл JPG содержит много разной информации, часто совершенно не нужной в веб-дизайне. Это теги, оставленные различными приложениями, информация о дате создания и прочее. Удалить это можно с использованием утилиты jpgtran.
Утилита не обладает GUI, но её использование не представляет труда. Просто скопируйте исполняемый файл из архива в папку пользователя windows, туда же скопируйте изображение JPG. Зайдите в Пуск->Выполнить, запустите cmd. Пропишите:
jpegtran.exe –optimize in.jpg out.jpg
где in.jpg – входное изображение, out.jpg – имя выходного изображения, optimize указывает на то, что кроме удаления тегов, будет ещё использоваться и алгоритм Хаффмана.
Оптимизация изображений без потери качества.
7. Использовать базовые JPG вместо последовательных.
Разницу между базовыми изображениями и последовательными можно заметить при загрузке: базовое изображение загружается построчно, а последовательное отображается сначала плохого качества, затем лучше, затем ещё лучше.
В чём плюс такого метода? Если у вас большое изображение, то пользователям не придётся ждать, пока загрузится всё изображение, чтоб понять его суть: они поймут что нарисовано ещё в первом отображении.
Один из веб-разработчиков Yahoo! Stoyan Stefanov исследовал разные JPG изображения и пришёл к выводу, что последовательные изображения получаются размером меньше базовых в 95% случаях (при условии, что файл больше 10кб).
Для создания последовательного JPG файла, можно воспользоваться той же утилитой jpgtran, запустив её с параметром –progressive:
jpegtran.exe –progressive in.jpg out.jpg
В Photoshop, при сохранении изображения можно указать Progressive и изображение сохранится как последовательное.
8. Не использовать масштабирование.
Согласитесь, будет глупо бороться за несколько десятков килобайт во всех предыдущих пунктах, а потом залить изображение с разрешением 300×300 на сервер и написать в html:
Несмотря на то, что сейчас всем понятна абсурдность подобного действия, многие продолжают масштабировать огромные фотографии размером более тысяч пикселей по высоте в маленькие превьюшки по сотне.
9. Сократить количество изображений (CSS Спрайты).
Я не предлагаю отказываться от какого-нибудь изображения: раз вы его используете, значит это вам надо. Я предлагаю объединять несколько изображений в одно. Что это даёт?
Логично, что если у нас есть 2 файла по 50кб, а объединив их в один, мы получим 100кб, то в обоих случаях загружаться будет 100кб. Любопытный момент состоит в том, что клиент за каждым файлом посылает запрос к серверу, сервер обрабатывает, возвращает файл и, если этих файлов много, то на посылку запроса и обработку в сумме уходит много времени.
Техника объединения нескольких файлов в один называется CSS Sprites и используется очень часто. Для описания этой техники необходимо писать отдельную статью. Пока я её не написал, я предлагаю вам попробовать разобраться самим с помощью этого инструмента.
10. Smush.it™
Инструмент от Yahoo!, отличный помощник в оптимизации изображений. Вы можете опробовать его тут: Smush.it. Просто загрузите шапку вашего сайта и оцените, сколько процентов вы сможете сэкономить только с помощью этого инструмента. Для того, чтоб использовать все возможности инструмента, вам необходимо установить YSlow от Yahoo! Как это сделать, описано в предыдущей статье цикла.
На этом я заканчиваю эту статью. Замечу, что на тему оптимизации изображений можно писать ещё много, я описал всего лишь ключевые моменты. Если у вас будут вопросы – задавайте, не стесняясь, и я отвечу на каждый из них.
В будущем планирую собрать ссылки по теме «Оптимизация изображений» в отдельной статье. Если у вас есть интересный материал на эту тему – можете прислать мне ссылку.
Related posts:
- Как увеличить скорость загрузки страниц. Часть первая.
- Семантическое ядро. Часть вторая: практика
- Скорость топовых блоггеров. Ускорь свой сайт – 4.










Спасибо, кратко и суть, особенно по Фотошопу, благодарю.
Остальное тоже не лишнее.
А когда будет обещанный обновленный баз плагин?:)
привет. Скажи, как с тобой можно связаться?
aronsky.ms@gmail.com
Маленькие изображения из gif в png переводить не всегда стоит, для примера я взял картинку размером 1.96кб gif и получил 2.05кб png :)
Жаль про спрайты доходчиво не написал, насколько я понимаю они действительно хорошо могут помочь ускорить загрузку страниц
Кстати, что в ru.spritegen означает Смещение по горизонтали и вертикали?
Спасибо
Расстояние между частями общего изображения. Косвенно я затрагивал тему спрайтов в статье «Создаём анимированную кнопку (css и jQuery)», но, наверное, напишу обширную статью на эту тему.
Насчёт *.gif и *.png: потеряли 92 байта? :-) Конечно, такое бывает, всё зависит от цветов, их количества, динамичности.
да статья понадобится… мне например не понятно, после добавления полученного кода и загрузки объединённой картинки на сайт, надо ли проводить ещё какие то манипуляции?