К сожалению, это зависит от вашей цели.
Если вы планируете использовать изображения в целях стиля, лучше всего использовать спрайты.
http://www.alistapart.com/articles/sprites2
Однако, если вы планируете использовать изображения в тегах , вам нужно предварительно загрузить их с
function preload(sources)
{
var images = [];
for (i = 0, length = sources.length; i < length; ++i) {
images[i] = new Image();
images[i].src = sources[i];
}
}
(измененный источник взят из Каков наилучший способ предварительной загрузки нескольких изображений в JavaScript? )
Использование new Image()
не требует затрат на использование методов DOM, но новый запрос на указанное изображение будет добавлен в очередь. Поскольку изображение на данный момент фактически не добавляется на страницу, повторного рендеринга не происходит. Однако я бы порекомендовал добавить это в конец вашей страницы (как и все ваши сценарии, когда это возможно), чтобы предотвратить удержание более важных элементов.
Редактировать: отредактировано, чтобы правильно отразить комментарий, указывая, что отдельные Image
объекты необходимы для правильной работы. Спасибо, и мой плохой за то, что не проверил это более внимательно.
Edit2: отредактировано, чтобы сделать повторное использование более очевидным
Изменить 3 (3 года спустя):
Из-за изменений в том, как браузеры обрабатывают невидимые изображения (отображение: нет или, как в этом ответе, никогда не добавляются к документу), предпочтителен новый подход к предварительной загрузке.
Вы можете использовать Ajax-запрос для принудительного раннего извлечения изображений. Используя jQuery, например:
jQuery.get(source);
Или в контексте нашего предыдущего примера вы можете сделать:
function preload(sources)
{
jQuery.each(sources, function(i,source) { jQuery.get(source); });
}
Обратите внимание, что это не относится к случаю спрайтов, которые хороши как есть. Это просто для таких вещей, как фотогалереи или слайдеры / карусели с изображениями, где изображения не загружаются, потому что они изначально не видны.
Также обратите внимание, что этот метод не работает для IE (ajax обычно не используется для получения данных изображения).