Картинки в теле страницы с помощью data: URL

Автор оригинала: website optimization
  • Перевод
Примечание: ниже расположен перевод статьи «Inline Images with Data URLs», в которой рассматривается вопрос о внедрении картинки на веб-страницы при помощи data:URI. Эта схема позволяет вставить код картинок прямо в (X)HTML-страницу без обращений к внешним файлам, что уменьшает общее количество HTTP-обращений к серверу. Мои комментарии далее курсивом.

Встроенные (inline) изображения используют схему data:URI для внедрения прямо в тело веб-страницы. Как было определено в RFC 2397, такие URI предназначены для вставки небольших объектов как «непосредственные» данные. Такие объекты должны рассматриваться так же, как и любые другие внешние файлы. Использование встроенных изображений позволяет сэкономить HTTP-запросы к внешних ресурсах.

Поддержка браузерами data:URL



Хотя Opera 7.2+, Firefox, Safari, Netscape и Mozilla поддерживают data:URI, Internet Explorer 5–7 совсем нет. Однако, сообщается, что Internet Explorer 8 будет поддерживать эту схему, так как проходит Acid2 тест, что позволяет использовать data:URL как реальную альтернативу для внедрения небольших декоративных изображений. Существует также несколько приемов для поддержки старых версий Internet Explorer.

читать дальше на webo.in →

Комментарии 48

    +4
    в минусах не написано, что инлайн картинки не получится закешировать, по определению :-)
      +2
      а еще опера с выключенными картинками эти картинки все равно не покажет а трафик на них уйдет)
        0
        если они будут в css, то почему нет?
          0
          а, разве что в цсс. пардон тогда...
          0
          А как-же это?

          Такие изображения, внедренные в HTML-страницы, не кешируются для повторного использования, и они не кешируются от странице к странице ... Однако, CSS кешируется браузерами, и такие изображения могут быть повторно использованы вместе с использующим их селектором
          +1
          Шифт забыли нажать в первой строке недостатков. (57ndash;7,)
            0
            Очень много времени будет занимать правка картинки.
            Думаю старый метод удобнее и надежнее.
            За статью спасибо, не знал что так можно делать в хтмл...
              0
              если правильно настроить окружение, то новый метод не более ресурсоемкий, чем старый
                +1
                хотя и не считаю этот способ необходимым, т.к. есть масса прокси серверов...
                но по поводу правки Вы не правы... кто Вам мешает написать функцию, которая при генерации страницы будет вставлять картинку. Я думаю оно изначально так и подразумевается, не будеш же ручками это все вставлять )) - это извращение получится
                +1
                IE 6-7 можно заставить понять base64 кодированные картинки - но это жесточайшее извращение ))
                к примеру http://bolknote.ru/2006.08.24
                  +1
                  Написано подробно и понятно, спасибо. Но вот насчет жизнепригодности этой технологии большой вопрос.
                  Главное, конечно, что IE не поддерживает, а так же не совсем удобное ведение проекта. Но в некоторых "узких" местах возможно будет удобно.
                    0
                    Познавательно. Хотя, не вижу смысла для практического применения этого метода. Для меня минусы перевешивают плюсы.

                    Во-первых работает не везде.
                    Во-вторых данные надо кодировать, чтобы поместить в код, что неудобно.
                    В третьих, траффик особо не экономится, так как данные все равно передаются, экономится только количество запросов к серверу. Что есть палка о двух концах.

                    Но за статью спасибо, узнать про это было интересно.
                      +2
                      Хех. Не очень понятно где использовать этот приём. Вроде бы такие вещи должны быть хороши для навигационных картинок, но тут лучше использовать другой приём - тот, который давно используется на простой странице поиска Гугла. Скажем сколько картинок на этой странице? Логотив вверху, Goooooooooogle внизу (причём ведь может быть и Google и Gooooogle, так что её вроде как надо собирать из частей), ещё там могут быть плюсики/минусики. Но Tools->Page Info покажет вам, что используется тут на самом деле ровно одна картика. Вот такая:

                      Обычно это даёт большую экономию, чем data:URL ...
                      0
                      >> Лично мне вышеприведенный код кажется сомнительным: все браузеры, кроме IE, посчитают,
                      >> что CSS-файлы закомментированы и вообще к ним не обратятся. Поэтому я бы советовал оставить
                      >> комментарии только для первого файла и переместить его вызов в конец, чтобы он переопределял
                      >> общие стилевые правила.

                      А раз уж так, что мешает через жаба скрипт или php подргужать на основании UA нужный css?
                      а хитрожопые подставляющие левый UA могут идти лесом, сами виноваты.
                      А тех, кто с каким нить старым браузером, можно отнестись вообще со своим вариантом.
                        0
                        сомнительное удовольствие
                          0
                          а по моему, кешировать можно вполне, используя любую систему кеширования, которая работает со строками. и тогда можно кешировать в Flash Storages или любую другую систему (например, через Dojo Storages), а для обычных картинок этого не сделаешь.
                            0
                            Респект. Мысль стоит добавления в статью. Действительно полезная идея для веб-приложений.
                              0
                              мне схема кеширования пока не совсем ясна. Если аналогично любому другому куску HTML-кода — это одно, это можно даже не упоминать. Но у меня есть подозрение, что имеется в виду что-то другое.
                            0
                            Вот так вот IE тормозит прогресс. Давно бы использовал если-б не IE.

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

                            Вот в таких случаях и использовались бы встроенные картинки, если бы не IE.
                              0
                              мне кажется, что CSS sprites + предзагрузка картинок вполне решают проблему
                                0
                                При повторной загрузке - полностью согласен, но при первой-то первым тянется html...
                                  0
                                  for(var i=0;i<images.length;i++)(new Image(width,height)).src=images[i].src</pre>
                                    0
                                    Мне кажется, что это не решит проблемы первой загрузки страницы.
                                  0
                                  Представьте, что вы зашли с чистым кэшем на хабра-хабр. Логично, что в первую очередь у вас должны загрузиться скругленные уголки боков, затем элементы дизайна: лого, крестик, галочка, стрелочки и пр. И в последнюю очередь должны нчать грузиться полумегабайтные картинки из постов.

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

                                      Есть. Вся навигация складывается в один .png файл, ссылка на который стоит в самом начале страницы (там где лого или первый уголок или ещё что), все остальные картинки - идут потом. Всё. Вначале грузятся уголки, элементы дизайна и прочая, вся страница показывается уже с оформлением, а уж затем грузятся все остальные картинки. Какие-то ну совсем мелкие картинки из постов могут проскочить вперёд, но это - не очень большая проблема...
                                  0
                                  не страдайте глупостями :)
                                  один отдельный картинко со спрайтами - и кэшируется хорошо и запросы экономит.
                                    –1
                                    лучше отдельной картинки со спрайтами может быть только встроенная картинка :) кешируется вместе со стилями, запросов на 1 меньше (для каждой картинки)
                                      0
                                      так и представляю... десятка два селекторов, после которых десятки килобайт каши-малаши.
                                      нормальная последовательность загрузки:
                                      1. страница с собственно данными
                                      2. стили, для задания раскладки и цветов
                                      3. картинки - дополнительные украшательства
                                      4. скрипты - дополнительная клиентская функциональность
                                      если раздуть цсс до неимоверных размеров, то счастливые пользователи оперы при первой загрузке будут продолжительное время смотреть на страницу без стилей вообще.

                                      целый запрос экономится... афигеть!
                                        0
                                        иногда целый запрос может стоить десятки тысяч долларов, когда речь идет об удовлетворении крупных корпоративных пользователей, ответственных за подписание ключевого контракта
                                          +1
                                          ^_^ я тоже тоже люблю сферических коней. они такие грациозные и быстрые...
                                            0
                                            если Вы с ними не имели дело, это не значит, что их не существует :)
                                    0
                                    Из-за наличия IE6/7 для обычных веб-сайтов еще года 3-4 о data:URL можно не думать.
                                    Зато в браузерах для iPhone/iPod Touch и Android все работает уже сейчас.
                                      0
                                      ИМХО как только IE такое внедрит, инет захлестнет волна новых эксплоитов и вирусов. Остальные браузеры этим уже переболели.
                                        0
                                        может, потому и не спешат?
                                          0
                                          может это и вовсе секретная стратегия MS?)) тогда остается только догадываться что бы было, если IE обзаводился всеми фичами в срок))
                                            0
                                            всеми необходимыми фичами он обзаводится всрок.
                                            видимо, у них другие приоритеты и цели, которые не совпадают с таковыми некоторых групп
                                        0
                                        хе, так в чем прикол инлайн картинок?
                                        кроме лишнего гемора и уменьшения кол-ва запросов, я чета больше не нашел.
                                        миллионы крупных сайтов работают на внешних картинках быстро и безболезненно.
                                          0
                                          IE8b1 доступен для ознакомления и он поддерживает data url. Но только длиной 32Кб. Судя по всему, ограничение это убирать не собираются.
                                            0
                                            Имхо, самое подходящее применение для инлайн изображений - капча (не нужно кэшировать, привязано к странице, код на сервере немного упрощается). В остальных случаях обычно лучше от лишних запросов избавляться с помощью "CSS sprites".
                                              +2
                                              Одно из приложений data URL, которые не было освещено — использование их в веб-приложениях, например, в Opera widgets. Там они более чем логичны.
                                              +1
                                                0
                                                пара моментов спорные (например, не указано, что делать с CSS-картинками, деление по Gecko немного удивило), но подход очень понравился. Может быть, сделаю еще одну общую статью на эту тему, расширив несколько случаи применения (+ надо же осветить mhtml все-таки :).
                                                  0
                                                  С CSS-картинками — по аналогии. Для Gecko в OBJECT обязательно указание mime type.
                                                0
                                                Ого, да это же хит!
                                                Пара замечаний:
                                                1. Раз уж автор предлагает использовать PHP в коде CSS, то почему бы уж не скупиться и не определять версию браузера на нем же.
                                                2. Опять таки про использование PHP, но на этот раз недоумеваю – если использовать в CSS файле base64 через PHP разве картинка для получения хэша не будет дергаться? Ну хотя если CSS станет кэшироваться будет легче.
                                                  0
                                                  я бы предложил статически «собирать» CSS-файлы перед заливкой на боевой сайт
                                                    0
                                                    Я не понял — вы мне коммент написали или нет?
                                                      0
                                                      Уже не помню, что Вы писали. Мой ответ, скорее, с одной стороны ответ Николаю, с другой – просто мысли всл

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

                                                  Самое читаемое