HTMLImageElement: свойство loading
Свойство HTMLImageElement loading — это строка, значение которой даёт подсказку пользовательскому агенту о том, как обработать загрузку изображения, которое в данный момент находится вне визуального области видимости окна браузера.
Это помогает оптимизировать загрузку содержимого документа, откладывая загрузку изображения до момента, когда оно, предположительно, понадобится, а не сразу при первой загрузке страницы.
Значение
Строка, дающая подсказку пользовательскому агенту о том, как лучше запланировать загрузку изображения для оптимизации производительности страницы. Возможные значения:
eager-
По умолчанию,
eagerговорит браузеру загрузить изображение сразу после обработки<img>элемента. lazy-
Говорит пользовательскому агенту отложить загрузку изображения до момента, когда браузер посчитает, что оно потребуется в ближайшее время. Например, если пользователь прокручивает документ, значение
lazyзаставит браузер загрузить изображение незадолго до того, как оно появится в визуальном области видимости окна браузера.
Примечания по использованию
Примечание: В Firefox, атрибут loading должен быть определён до атрибута src, иначе он не будет иметь эффекта (Ошибка Firefox 1647077).
Необходимо включить JavaScript
Отложенная загрузка происходит только при включенном JavaScript. Это мера противодействия отслеживанию, поскольку если пользовательский агент поддерживал отложенную загрузку при отключенном сценарии, сайт всё ещё мог отслеживать приблизительное положение прокрутки пользователя в течение сессии, размещая изображения в разметке страницы так, чтобы сервер мог отслеживать, сколько изображений запрошено и когда.
Время срабатывания события load
Событие load срабатывает, когда документ полностью обработан. Когда изображения загружаются сразу (что является значением по умолчанию), каждое изображение в документе должно быть получено, прежде чем сможет сработать событие load.
Установив значение lazy для loading, вы предотвратите задержку события load из-за времени, необходимого для запроса, получения и обработки изображения.
Изображения, у которых атрибут loading установлен в значение lazy, но которые находятся в визуальной области видимости сразу после первоначальной загрузки страницы, загружаются сразу после того, как расположение элементов известно, но их загрузка не задерживает срабатывание события load . Другими словами, эти изображения не загружаются сразу при обработке <img> элемента, но всё же загружаются как часть первоначальной загрузки страницы. Просто они не влияют на время срабатывания события load.
Это означает, что когда сработает load, возможно, что любые загружаемые по мере необходимости изображения, находящиеся в визуальной области видимости, ещё не будут видны.
Предотвращение смещения элементов при отложенной загрузке изображений
Когда изображение, загрузка которого была отложена из-за установки атрибута loading в значение lazy, наконец загружается, браузер определит окончательный размер элемента <img> на основе стиля и внутренних размеров изображения, затем перестроит документ по необходимости, чтобы обновить позиции элементов в зависимости от любых изменений размера, внесённых в элемент для размещения изображения.
Чтобы предотвратить перестроение, вы должны явно указать размер представления изображения, используя атрибуты элемента изображения width и height. Установив таким образом внутреннее соотношение сторон, вы предотвратите смещение элементов во время загрузки документа, что может быть неудобным или раздражающим в лучшем случае и может привести к нажатию пользователем не того элемента в худшем случае, в зависимости от точного времени отложенных загрузок и перестроек.
Примеры
Нижеприведённая функция addImageToList() добавляет миниатюру фотографии в список элементов, используя отложенную загрузку, чтобы избежать загрузки изображения из сети до тех пор, пока оно не понадобится.
function addImageToList(url) {
const list = document.querySelector("div.photo-list");
let newItem = document.createElement("div");
newItem.className = "photo-item";
let newImg = document.createElement("img");
newImg.loading = "lazy";
newImg.width = 320;
newImg.height = 240;
newImg.src = url;
newItem.appendChild(newImg);
list.appendChild(newItem);
}
Спецификации
| Спецификация |
|---|
| HTML # dom-img-loading |
Совместимость с браузерами
| Рабочие столы | Мобильные устройства | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
| Chrome | Edge | Firefox | Opera | Safari | Chrome Android | Firefox для Android | Opera Android | Safari на iOS | Samsung Internet | WebView Android | |
loading |
77 | 79 | 75 | 64 | 15.4 | 77 | 79 | 55 | 15.4 | 12.0 | 77 |
См. также
- Элемент
<img> - Производительность веб-приложений в учебном центре MDN
- Отложенная загрузка в руководстве по производительности веб-приложений MDN
© 2005–2024 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/API/HTMLImageElement/loading