Pull to refresh

«Свежачок» по оптимизации — поведение браузеров при использовании Data:URI CSS Sprites

Reading time 2 min
Views 1.3K

Последнее время в инете стало появляться все больше публикаций про использование data:uri css sprites. Приведу две ссылки из блога Steve Souders, известный всему миру «оптимизатор» работающий в Google.

CSSEmbed — automatically data: URI-ize
Aptimize: realtime spriting and more

Наш отечественный герой «веб-оптимайзер» sunnybear намного раньше поднимал вопрос про использование data:uri в css и нами совместно был проведен ряд исследований. В то время вылезло много интересных моментов и особенностей о которых мы писали в предыдущих статьях. Последние эксперименты вскрыли ряд ранее неизвестных моментов по работе браузеров с data uri css спрайтами.


Проблема заключается в том, что при неумелом использовании техники data:uri css sprites возможно замедление скорости загрузки (отображения) сайта.

Рассмотрим на примере


Обычно, при использовании data:uri css sprites фоновые изображения отделяются от основных стилей и преобразуются в base64, затем помещаются в файл стилей, который подключается отдельно. Из-за того того, что внутрь данного файла помещаются все (или почти все) фоновые изображения, размер его получается довольно велик.

Подключаем data:uri в HEAD


Если мы подключим оба файла стилей (основной и с base64 изображениями) в HEAD происходит «заморозка» отображения сайта до окончания загрузки этих стилей, а так как вес data:uri css файла большой, это время может быть довольно значительным.

Пример подключения в HEAD

Для большей наглядности, в указанном примере, сделана 10 секундная задержка на выдачу data:uri css.

Результаты по браузерам

Не отображают страницу до тех пор пока не закончится загрузка data:uri css:
— Chrome 3.0.195.33
— FF 3.5.5
— Safari 4.0.3
— IE 8.0.6001

Отрисовывает страницу сразу не дожидаясь окончания загрузки data:uri css:
— Opera 9.62

Подключаем data:uri в FOOTER (возле </body>)


Если мы подключим основной файл стилей в HEAD, а файл стилей с base64 изображениями в FOOTER «заморозки» не происходит, мы получаем нужный желаемый эффект оптимизации, страница грузится моментально быстро + по окончанию загрузки data:uri css (через таймаут) у нас отображаются все base64 изображения.

Пример подключения в FOOTER

Результаты по браузерам

Не отображает страницу до тех пор пока не закончится загрузка data:uri css:
— IE 8.0.6001

Отрисовывают страницу сразу не дожидаясь окончания загрузки data:uri css:
— Chrome 3.0.195.33
— FF 3.5.5
— Safari 4.0.3
— Opera 9.62

Выводы


При использовании техники data:uri css sprites крайне рекомендуется
1) разделять файлы основных стилей и стилей с base64 изображениями (data:uri css)
2) подключать data:uri css в конце документа, как можно ближе к закрывающему тегу </body>
3) использовать js-css мост (антифриз) для подключения data:uri css в ИЕ

P.S.: Я рад, за стабильность моих приключений с IE, даже в 8-ой версии я частенько встречаю приятные сюрпризы, которые делают мою работу интереснее.

РЕКЛАМА
Летайте самолетами аэрофлота
Tags:
Hubs:
+32
Comments 27
Comments Comments 27

Articles