Клиентская оптимизация

индекс
163,90

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


Последнее время в инете стало появляться все больше публикаций про использование 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-ой версии я частенько встречаю приятные сюрпризы, которые делают мою работу интереснее.

РЕКЛАМА
Летайте самолетами аэрофлота
+32
1 декабря 2009, 12:39
63

комментарии (27)

+3
TecHMeaT #
P.S.: Я рад, за стабильность моих приключений с IE, даже в 8-ой версии я частенько встречаю приятные сюрпризы, которые делают мою работу интереснее.
Да уж, иногда стабильнось вовсе не означает качество ))
+1
inkover #
fullajax.ru/temp/datauri/ravelrumba/test_header.htm

FF 3.5.5 eng @win7 — страница отобразилась сразу.
0
3ds #
может быть у вас супербыстрый интернет? У меня FF 3.5.5 ru @win7 — около 10 сек. IDSL 256Kb
0
inkover #
не особо быстрый. 1мбит. пинг 60 мс до москвы.

просто утверждается, что если в хеадере css-ка с sleep'ом, то страница вообще не отображается, пока не загрузится css-ка. вот это я опровергаю. страница показыавется сразу, а css-ные элементы с base64 изображениями показываются через 10 секунд.
НЛО прилетело и опубликовало эту надпись здесь
+1
sirus #
в данной статье mhtml не рассматривался, поведение его идентично как data:uri в ИЕ8, тоже происходит заморозка, нужно использовать js-css мост, а для IE7@Vista вообще не использовать mhtml, посмотрите как происходит автосборка в duris.ru, там учтено это дело.
0
Dlussky #
В DURIS было бы интересно увидеть возможность загрузки сайта не с урла, а из mht или специально подготовленного зипа. Ибо недоступный извне интранет, или просто закрытый ресурс он не возьмет. И если с закрытым ресурсом можно решить проблему созданием спец-урла только для сервиса, то специально выкладывать интранет на внешний хостинг довольно-таки влом)

З.Ы. Описанное в статье поведение Оперы — одна из главных причин ее популярности в СНГ со времен модемов)
0
sunnybear #
Web Optimizer использует еще один подход (абсолютно соответствующий стандартам!). Глеб до него с переводами пока не добрался :)
blog.web-optimizer.us/2009/10/really-parallel-css-files-possible.html
НЛО прилетело и опубликовало эту надпись здесь
0
sunnybear #
«Настоящий» XHTML — это какой-то новый вид документа? )
НЛО прилетело и опубликовало эту надпись здесь
–1
sunnybear #
можно обернуть через CDATA. Мне кажется, что такой «правильный» XHTML — тупиковая ветка стандартов, скоро отомрет. Будущее за HTML5.
НЛО прилетело и опубликовало эту надпись здесь
–1
sunnybear #
я не стыжусь. Ибо другого «стандартного» способа здесь, по-видимому, нет
НЛО прилетело и опубликовало эту надпись здесь
–1
sunnybear #
:) а Вы попробуйте. Заодно можно статью годовой давности почитать
webo.in/articles/habrahabr/64-css-to-post-load/
НЛО прилетело и опубликовало эту надпись здесь
–1
sunnybear #
классно! значит, это отменяет никому ненужный document.write :)
0
sirus #
да, это так называемый js-css мост
0
sunnybear #
я не говорю, что это что-то «совсем» новое. Просто есть пара способов сделать его «стандартным» :)
0
myem #
Хм, и при этом link внутри body совершенно не по стандартам. Из-за этой «тонкости» недавно поимел немало проблем, например, с Сафари.

Так что если к сайту выдвигается ещё и требование «максимальная кроссбраузерность, работоспособность после первой загрузки» (а не за счет уже подтянутых из кэша требуемых файлов) — стоит сильно подумать, нужно ли уходить от стандартов.
–1
sunnybear #
чуть выше мой комментарий )
0
benedikt #
Необходимо css файл с data:uri еще и сжимать.
Я в одном проекте (www.autovesti.com.ua), где активно используется data:uri — сжал css файл размером 92кб до 23кб.
Также можно data:uri использовать не только в css файлах, но и при отображении мини картинок например.
0
sirus #
верно, крайне рекомендуется сжимать data:uri css с помощью gzip
0
b3nd3r #
А что за шрифт на скриншоте?
0
stab #
0
tenshi #
> разделять файлы основных стилей и стилей с base64 изображениями (data:uri css)

за что боролись — на то и напоролись XDDD

Только зарегистрированные пользователи могут оставлять комментарии. Войдите, пожалуйста.