Отложенная загрузка изображений: loading=lazy
Откладывайте загрузку изображений за пределами экрана с помощью встроенного атрибута loading
«Отложенная загрузка изображений: loading=lazy» — бесплатный урок HTML Academy на CoddyKit. Это урок 3 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения HTML Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс HTML Academy содержит 4 уроков всего.
Атрибут loading
<img loading="lazy" src="..."> сообщает браузеру, что загрузку изображения следует отложить до момента, когда оно почти войдёт в область просмотра. Нативная поддержка во всех современных браузерах делает это самым простым способом повысить производительность страниц с большим количеством изображений.
Как определяется близость к области просмотра
Браузеры используют небольшой эвристический запас (обычно несколько тысяч пикселей ниже нижней границы первоначального экрана). Изображение начинает загружаться достаточно рано, чтобы к моменту прокрутки пользователя до него оно уже было полностью отрисовано — при внимательной прокрутке отложенная загрузка незаметна.
Когда не следует использовать отложенную загрузку
Никогда не устанавливайте loading="lazy" для изображений в верхней части страницы или для кандидата LCP (отрисовки самого крупного элемента содержимого). Отложенная загрузка задерживает появление самого важного визуального элемента, что ухудшает как субъективное ощущение скорости, так и показатели Core Web Vitals.
Ширина и высота обязательны
Чтобы отложенная загрузка работала эффективно, задайте для <img> явные значения width и height (или CSS-свойство aspect-ratio). Без этих размеров браузер не может заранее зарезервировать место, при прокрутке компоновка перестраивается, а эвристика отложенной загрузки работает неправильно.
<img loading="lazy" src="cat.jpg" width="800" height="600" alt="A cat">Отложенная загрузка iframe
Тот же атрибут работает и для <iframe>. <iframe loading="lazy"> откладывает загрузку карт, видео и встраиваемых материалов социальных сетей, расположенных ниже первого экрана, — иначе каждый просмотр страницы загружал бы мегабайты стороннего JavaScript.
Значение eager по умолчанию
Значением по умолчанию является loading="eager" (немедленная загрузка), поэтому его редко указывают явно. Установка eager для изображений в верхней части страницы может быть полезна как документация: она показывает проверяющим код, что выбор eager был сделан намеренно.
Сочетание с srcset
Отложенная загрузка прекрасно сочетается с адаптивными изображениями. Браузер по-прежнему выбирает подходящий вариант из srcset, просто скачивает его позже. Дополнительная координация между loading="lazy" и srcset не требуется.
<img
loading="lazy"
srcset="img-400.jpg 400w, img-800.jpg 800w, img-1200.jpg 1200w"
sizes="(min-width: 768px) 800px, 100vw"
src="img-800.jpg"
alt="Hero"
width="800" height="600"
>Подсказка для декодирования
Сочетайте отложенную загрузку с decoding="async", чтобы браузер мог декодировать изображение в отдельном от основного потоке потоке. Это предотвращает блокировку ввода во время прокрутки, когда после длительной серии прокруток одновременно загружается много изображений.
Фоновые изображения
Фоновое изображение CSS нельзя нативно загружать отложенно. Для фоновых изображений главного экрана это нормально; для фонов ниже первого экрана используйте IntersectionObserver, чтобы подставлять URL, когда элемент приближается к области просмотра.
Поведение при печати
При печати страницы браузер загружает все изображения без задержки, независимо от loading="lazy", чтобы напечатанная копия была полной. Для таблиц стилей печати не требуется отдельно обрабатывать изображения с отложенной загрузкой.
Измерение экономии
Проверка Lighthouse «Отложить загрузку изображений за пределами экрана» перечисляет все изображения, для которых следует использовать loading="lazy". Фильтрация панели сети по «Изображениям» вместе с представлением «Водопад» показывает последовательные загрузки, создаваемые отложенной загрузкой: в галереях изображений количество первоначальных запросов резко сокращается.
Проверка знаний
Почему вредно устанавливать loading="lazy" для главного изображения в верхней части страницы?
Итоги
Установка loading="lazy" для элементов <img> и <iframe> за пределами экрана даёт заметный выигрыш в производительности одним атрибутом. Сочетайте её с явными width/height (чтобы зарезервировать место), srcset (для адаптивности) и decoding="async" (чтобы прокрутка оставалась плавной). Никогда не применяйте её к изображению LCP или к любому элементу, видимому в первоначальной области просмотра.
Часто задаваемые вопросы
Урок «Отложенная загрузка изображений: loading=lazy» бесплатный?
Да — полный текст урока «Отложенная загрузка изображений: loading=lazy» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс HTML Academy, подпишись на CoddyKit PRO. Курс HTML Academy содержит 4 уроков всего.
Чему я научусь в уроке «Отложенная загрузка изображений: loading=lazy»?
Откладывайте загрузку изображений за пределами экрана с помощью встроенного атрибута loading Ты практикуешь HTML Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать HTML Academy?
Предыдущий опыт не требуется. HTML Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 3 из 4.
Сколько времени занимает урок «Отложенная загрузка изображений: loading=lazy»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке HTML Academy?
Да. Каждый урок HTML Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Атрибуты async и defer
- Предварительная загрузка, выборочная загрузка и предварительное соединение
- Отложенная загрузка изображений: loading=lazy
- Подсказки для ресурсов: modulepreload