Тема актуальна для картинок, которые не видны при первой загрузке страницы. Обычно они находятся в блоках с display:none (разные popup’ы) или используются для подмены при наведении на блок.
Проблема в том, что смена (желаемая) происходит на экране обычно быстрее, чем подгрузка картинок с сервера (особенно актуально для соединений с длинным пингом). Поэтому, чтобы не ждать пока изображение на экране перестанет быть уродливым, есть смысл загрузить все картинки сразу (правда время первой загрузки увеличится).
Нашёл 4 метода для этого:
- сделать спрайт — поместить картинки, относящиеся к одному объекту и описывающие разные его состояния (спокойной состояние и при наведении курсора) в один файл. А смену картинок реализовать через background-position. Из недостатков — невозможность использования PNG в ие6 и мигание (flicker эффект) в ие — тот считает, что картинку надо всё равно подгружать, в кеш ему заглянуть лень. Но прелоад — это то, что никогда не обсуждается в ТЗ, не входит в мои обязанности и вполне (что логично) реализуемо через JS, поэтому то, что я делаю прелоад — бонус и ИЕ меня в этом случае мало интересует
- сделать картинку с прозрачными областями и заполнять эти области через background-color. Из моей практики, таких случаев, когда можно применить этот метод — единицы, ведь использовать можно опять-таки только GIF, кроме того, нужно задавать цвет для бекграунда, а при смене цвета для общего фона будет пятно (о любви к заказчикам я уже писал)
- сегодня нашёл способ — положить картинки, которые нужно закешировать, в бекграунды прочим элементам страницы (ЛЮБЫМ, у которых его нет). А чтобы они не мешали — использовать background-position. Ещё не пробовал, но звучит очень интересно.
А проще картинки вызывать в цсс, кэшировать, а при необходимости вызывать.
Не обязательно при этом делать «бекграунды прочим элементам страницы(ЛЮБЫМ, у которых его нет)».
а как их, простите, «вызывать в цсс», не укладывая в бекграунды?
вызывать-то через БГ, но можно использовать стили которых нет вообще в ХТМЛе
а, укладывать в бекграунды, но несуществующих блоков? а они подгрузятся? если браузеры не подгружают даже для боксов с display:none.
а не знаю, надо пробовать :)
Писал о примочках
Правда остаётся нерешённой проблема позиционирования PNG-бекграунда. Знаю, есть яваскриптовые примочки для этого. Но я не люблю такого. Ну вот не люблю и всё! Поэтому из 300+ проектов я такую примочку использовал в 1-2. Если можно обойтись без неё — никто мне не докажет, что это проблема. Так, мелкий недочёт.