6 апреля 2019 года Эдди Османи написала о ленивой загрузке нативных изображений. Двумя днями позже Ивен, фронтенд-разработчик из Парижа, спросил меня, может ли моя ванильная ленивая загрузка быть полифиллом атрибута загрузки, вдохновив меня на разработку и выпуск версии 12 скрипта, в которой есть новая use_native
опция для включения встроенная отложенная загрузка, где она поддерживается. Вы можете использовать его уже сегодня.
Чего ждать?
Если вы пропустили статью Эдди Османи, можно будет нативно лениво загружать изображения с помощью атрибута loading="lazy"
для изображений и фреймов, и это уже возможно в Chrome 75 (в настоящее время Canary).
<img loading="lazy" src="...">
<iframe loading="lazy" src="...">
Браузеры сначала извлекают крошечную часть изображений (~ 2 КБ), чтобы получить некоторую начальную информацию (например, размер), а затем извлекают остальные, когда они собираются войти в область просмотра.
Проблема в том, что если вы напрямую назначите src
(и/или srcset
) изображениям, браузеры, которые до сих пор не поддерживают встроенную ленивую загрузку, загрузят их все сразу, а этого вы, возможно, захотите избежать, чтобы сохранить пропускную способность. и ускорьте свой веб-сайт или веб-приложение.
По этой причине я добавил параметр use_native
в версию 12 vanilla-lazyload, который включает встроенную отложенную загрузку там, где она поддерживается.
Дополнительную информацию о нативной ленивой загрузке можно найти в статье Эдди Османи ленивая загрузка нативных изображений.
Браузер, который вам нужен
По состоянию на 10 апреля 2019 года нативная ленивая загрузка находится на ранних стадиях (предварительная версия для разработчиков) и доступна только в Chrome 75 (в настоящее время Canary) и под флагом. Итак, чтобы протестировать его, вам нужно:
- Скачать Chrome Canary и установить его
- В Chrome Canary перейдите по URL-адресу chrome://flags и включите следующие флаги: Включить отложенную загрузку изображений + Включить отложенную загрузку iframe
- Перезапустите Chrome Canary
Демо
Теперь, когда у вас есть браузер Chrome Canary с включенной встроенной отложенной загрузкой, вы можете приступить к посещению следующей демонстрационной страницы.
→ Открыть демо и/или Проверить код
Если вы все сделали правильно, то произойдет вот что:
- В Chrome 75 (Canary) LazyLoad запускает встроенную ленивую загрузку.
- В других браузерах и более старых версиях Chrome будет происходить отложенная загрузка на основе js.
Попробуйте на своем сайте!
Для того, чтобы попробовать это самостоятельно, вам необходимо выполнить следующие шаги.
Разметка
Изображения в области просмотра/в верхней части страницы должны иметь обычные теги <img>
. Использование data-src
приведет к отключению сканера предварительной загрузки браузера, поэтому мы хотим избежать его из соображений производительности. Кроме того, вы можете использовать атрибут loading="eager"
, чтобы убедиться, что они загружаются как можно скорее.
<img
src="eager-eagle.jpg"
loading="eager"
alt="Eager Eagle"
/>
Для изображений вне области просмотра/ниже сгиба вы все равно должны использовать data-src
, data-srcset
и data-sizes
, чтобы избежать быстрой загрузки в неподдерживаемых браузерах.
<img
data-src="lazy-sloth.jpg"
class="lazy"
alt="Lazy Sloth"
/>
Обратите внимание, что вы можете лениво загружать адаптивные изображения, используя как тег img
, так и тег picture
. Подробнее о ленивой загрузке адаптивных изображений.
Теперь к коду Javascript!
Вам понадобится vanilla-lazyload версии 12 (в настоящее время в бета-версии).
Вы можете включить его через CDN:
<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/lazyload.min.js"></script>
Или установите его с помощью npm:
npm install [email protected]
В коде установите для параметра use_native
значение true
при создании экземпляра LazyLoad:
new LazyLoad({
elements_selector: `.lazy`,
use_native: true // This one
})
Опция use_native
гарантирует, что:
- там, где поддерживается собственная ленивая загрузка, LazyLoad добавляет к изображениям атрибут
loading="lazy"
, а затем просто меняет атрибутыdata-*
на правильные. Теперь браузер сам будет управлять ленивой загрузкой. - там, где собственная ленивая загрузка НЕ поддерживается, ленивая загрузка по-прежнему управляется Javascript.
Вывод
Сегодня вы можете иметь как встроенную ленивую загрузку, так и ленивую загрузку на основе js, используя vanilla-lazyload 12, просто установив для параметра use_native
значение true
.
Если у вас есть вопросы, не стесняйтесь обращаться ко мне. В Твиттере я @verlok.