В мире новостей



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

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

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

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

Схема data:URI

Схема data:URI предоставляет способ для внедрения «непосредственно данных» точно так же, как если бы они были подключены через вызовы внешних файлов. Синтаксис у нее следующий:

data:[<тип данных>][;base64],<данные>

В случае простых изображений вам нужно указать mime-тип для них (например, image/gif), за ним идет base64-представление бинарного файла с изображением. Ниже приведен пример (переводы строк добавлены, чтобы не разрывать страницу, на самом деле, их нет):

<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAALCAIAAAD5gJpuA
AAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAPJJREFUKM9tjz1
OwlEQxH8P/hV2NIZY0NhYeA0TbkLLPTyFV6DgLhYWFIaOm
EhM3szbtXhEPmSy2Z3d2Y9sORySEyKih87iCg4GYDIByEwoQGbPCowzR3m
G3e576Jsz85zkLZRSIqIsFrlc5n5PBK1l0Rka2lfeDun07JafQ2bTTw/l+0WOy3klFLKWq/9fA4wADZS/
g10ufdVpeqxYheIAehHq9Li1PrvgpQQw5rxk15/6mfYWR1yVIUc0pFUNync7vyw5m14gbHfQx+
3l3di4Vba4z0MASOZ2Swl3LCQitQ/w8amtW4B5QBxZlymVxLwCz+JZR4AeSr
EAAAAAElFTkSuQmCC" width="16" height="14" alt="внедренная иконка"/>

В результате мы получим следующее изображение иконки флага:

SpeedUpYourWebsite.v1.2_img_21

Рис. 21. Пример изображения, вставленного с помощью data:URI. Источник webo.in

CSS и встроенные изображения

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

ul {
     list-style: none;
}
ul li {
      margin: 0 0 1px;
      background:url (data:image/png;base64,iVBORw0KGgoAAAANSUhE
UgAAABAAAAALCAIAAAD5gJpuAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZ
SBJbWFnZVJlYWR5ccllPAAAAPJJREFUKM9tjz1OwlEQxH8P/hV2NIZY0N
hYeA0TbkLLPTyFV6DgLhYWFIaOmEhM3szbtXhEPmSy2Z3d2Y9sORySEyK
ih87iCg4GYDIByEwoQGbPCowzR3mG3e576Jsz85zkLZRSIqIsFrlc5n5PBK1l0Rka
2lfeDun07JafQ2bTTw/l+0WOy3klFLKWq/9fA4wADZS/g10ufdVpeqxYheIAehHq9Li1Prv
gpQQw5rxk15/6mfYWR1yVIUc0pFUNync7vyw5m14gbHfQx+3l3di4Vba4z0MASOZ2
Swl3LCQitQ/w8amtW4B5QBxZlymVxLwCz+JZR4AeSrEAAAAAElFTkSuQmCC) 0 0 no-repeat;)
      height: 14px; 
     text-indent: 10px;
}

Проблемы data:URI

С описанным выше подходом для подключения изображений связаны две основные проблемы. Во-первых, вам нужно пересчитывать base64-представление изображений и редактировать CSS-файл каждый раз, когда само изображением меняется. Также IE до версии 7 включительно не поддерживает встроенных изображений. У первой проблемы есть простой решение на PHP:

<?php echo base64_encode(file_get_contents("../images/flag.png")) ?>

Этот код читает файл с изображением и автоматически преобразовывает его на сервере в base64. Однако, это простота этого решения повлечет некоторую дополнительную нагрузку на сервер. Как вариант, можно рассмотреть автоматический пересчет всех картинок и вставку их в CSS-файл, например, раз в 5 минут по необходимости (если файл с изображением изменился). Дополнительно нужно будет озаботиться, чтобы сбросить кэширование для самого CSS-файла, содержащего такие изображения.

Работа в Internet Explorer

Существует три способа обойти отсутствие в IE поддержки data:URI. Используя распознавание браузеров (например, с помощью условных комментариев, ведь речь идет только про IE), можно просто отображать внешнее изображение для IE и встроенные изображения для остальных браузеров. Или вы можете применить JavaScript для эмуляции этой поддержки в IE, но эта техника потребует довольно значительного объема JavaScript-кода. О третьем способе пойдет речь в разделе, описывающем mhtml-технику.

Вышеприведенный PHP-код позволяет легко вставить base64-аналог изображения (можно расширить этот пример, чтобы, например, распознавать заголовки, отправляемые браузером серверу и только для IE выводить URL для изображения, для остальных же кодировать его в base64):

ul { 
     list-style: none;
}
ul li { 
     margin: 0 0 1px; background: url(data:image/gif;base64,<?php echo base64_encode(file_get_contents("../images/flag.png")) ?>) top left no-repeat;
      height: 14px; 
     text-indent: 10px;
}

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

<!--[if gte IE 5]> 
     <style type="text/css" src="/ie.css">
<![endif]-->
<!--[if !(IE)]> 
     <style type="text/css" src="/main.css">
<![endif]-->

В файле ie.css должно быть нормальное обращение к картинке, например:

ul li { 
     margin: 0 0 1px; 
     background: url(/images/flag.png) 0 0 no-repeat;
}
...

 
Авто из Тольятти. Машина ваз калина отзывы цена и фото.|Ejaculation precoce

Алгоритм Находка

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


Читать полностью

Алгоритм Снежинск

10 ноября 2009 года Яндексом была анонсирована новая версия поискового алгоритма – Снежинск.

Коренные изменения произошли в алгоритме расчета релевантности – представители Яндекса написали следующее: «Нам удалось создать более точную и гораздо более сложную математическую модель, которая привела к существенному приросту в качестве поиска. Благодаря переработке архитектуры ранжирования в...


Читать полностью

Оптимизация сайтов под поисковые системы

"Найдётся всё!" - говорит Yandex , обнадёживая тем самым пользователей. Но кто обнадёжит владельцев сайтов, которые хотят, чтобы "нашёлся" именно их Интернет-ресурс?

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


Читать полностью

Алгоритм Магадан

14 апреля 2008 года адресу buki.yandex.ru начала тестироваться новый поисковый алгоритм «Магадан». Кроме того, что увеличилось вдвое количество факторов ранжирования, был также добавлены следующие нововведения:


Читать полностью
Группа "Креативные Веб Проекты" 107140 Россия, Москва, Гусятников переулок д.7