Настроить отложенную загрузку скрытых изображений html

Содержание
  1. Lazy Load 2.0 – ленивая (отложенная) загрузка изображений на JavaScript
  2. Инструкция по установке Lazy Load 2.0 на сайт
  3. Браузерная ленивая загрузка изображений (атрибут loading)
  4. Почему встроенная ленивая загрузка?
  5. Атрибут loading
  6. Порог расстояния загрузки
  7. Загрузка изображений
  8. Есть ли планы расширить эту функцию?
  9. Можно ли изменить расстояние до изображения или фрейма, при котором запускается отложенная загрузка?
  10. Могут ли изображения, заданные через CSS-свойство background, получить атрибут loading?
  11. Как работает атрибут loading с изображениями, которые находятся в области видимости, но не видны (например, карусель)?
  12. Что, если я уже использую стороннюю библиотеку или скрипт для отложенной загрузки изображений или фреймов?
  13. Другие браузеры поддерживают встроенную отложенную загрузку?
  14. Как поступить с браузерами, которые еще не поддерживают встроенную отложенную загрузку?
  15. Как отложенная встроенная загрузка влияет на рекламу на странице?
  16. Как изображения обрабатываются, если веб-страницу распечатать?
  17. Заключение
  18. Ленивая загрузка (Lazy loading): что это такое и как ее сделать на сайте
  19. Зачем применять ленивую загрузку на сайте?
  20. Разновидности ленивой загрузки
  21. Как сделать ленивую загрузку?
  22. 5 вариантов ленивой загрузки для изображений
  23. №1. Стандартный lazy loading и отображение от David Walsh
  24. №2. Robin Osborne – ленивая загрузка с прогрессивным улучшением
  25. №3. Плагин bLazy.js на простом JS
  26. №4. Плагин Lazy Load XT jQuery
  27. №5. Размытое изображение от Craig Buckler
  28. Ленивая загрузка для контента
  29. Заключение

Lazy Load 2.0 – ленивая (отложенная) загрузка изображений на JavaScript

Если вам доводилось сталкиваться с PageSpeed Insights – инструментом по анализу скорости загрузки сайта от компании Google, то вы могли наблюдать в нем сообщение вида «Отложите загрузку скрытых изображений». Что это и зачем Google рекомендует внедрить эту технологию на ваш сайт?

Все дело в том, что когда человек заходит на ваш сайт, первое, что он видит, это первый (ключевой) экран сайта – ту область от начала (самого верха) вашего сайта, что умещается на его мониторе. Что идет ниже – он пока не видит, и может не увидеть в принципе (по своему желанию или другим причинам).

К чему я все это рассказываю? Если на вашем сайте большое количество изображений, все они будут грузиться, независимо от того, видит их пользователь или нет, что, в свою очередь, добавляет лишние секунды к времени полной загрузки страниц вашего сайта.

Чтобы не заставлять человека ждать и максимально быстро предоставить ему информацию, в которой он нуждается, и существует чудесный плагин под названием «Lazy Load». Он позволяет подгружать изображения по мере прокрутки страницы, когда они начинают попадать в область видимости.

Первые версии плагина, автором которого, кстати говоря, является Мика Туупола, были реализованы с использованием jQuery. В этой же статье я покажу вам свежую версию плагина (Remastered, как называет ее сам автор) на чистом JavaScript.

Инструкция по установке Lazy Load 2.0 на сайт

Итак, все как обычно.

1. Скачайте архив в конце статьи, разархивируйте и содержимое загрузите на ваш сайт удобным для вас способом.

2. Далее в секцию HEAD на всех страницах вашего сайта подключите ранее загруженный скрипт:

Не забывайте корректно прописывать адрес до скрипта на вашем сайте.

Источник

Браузерная ленивая загрузка изображений (атрибут loading)

Поддержка встроенной ленивой загрузки изображений и iframe пришла в веб!
Начиная с Chrome 76 версии, вы можете использовать новый атрибут loading для ленивой загрузки ресурсов без необходимости писать для этого дополнительный код или использовать стороннюю JavaScript-библиотеку. Давайте рассмотрим детали.

Это видео демонстрирует пример этой функции:

Почему встроенная ленивая загрузка?

Согласно HTTPArchive, изображения являются наиболее востребованным типом ресурсов на большинстве сайтов и обычно отнимают больше пропускной способности канала, чем любые другие. На 90-м процентиле, сайты отправляют около 4.7 МБ изображений на десктопы и мобильные устройства. Достаточно много фотографий с кошками.

Встроенные iframe также используют много данных и могут вредить производительности страницы. Загрузка некритичных изображений и iframe только в тот момент, когда пользователь может увидеть их, улучшает скорость загрузки страницы, минимизирует нагрузку на пропускную способность канала пользователя и уменьшает использование памяти.

В данный момент существует два способа отложить загрузку изображений и фреймов, расположенных за пределами экрана:

  • использование Intersection Observer API
  • использование обработчиков событий scroll , resize или orientationchange

Любой из вариантов может позволить разработчикам включить функционал отложенной загрузки, и многие создали сторонние библиотеки, чтобы предоставить абстракции, которые использовать еще проще. При наличии поддержки ленивой загрузки непосредственно в браузере, не возникнет потребности в сторонней библиотеке. Встроенная ленивая загрузка также гарантирует, что отложенная загрузка изображений и фреймов продолжит работать, даже если JavaScript отключен на стороне клиента.

Атрибут loading

Сегодня Chrome уже загружает изображения с разным приоритетом, в зависимости от того, где они расположены относительно области просмотра устройства. Изображения ниже области просмотра загружаются с меньшим приоритетом, но всё ещё загружаются, как можно быстрее.

В Chrome 76 вы можете использовать атрибут loading , чтобы окончательно отложить загрузку изображений и фреймов за пределами экрана, до которых можно дойти прокруткой:

Поддерживаемые значения атрибута loading :

  • auto : настройка режима ленивой загрузки, выставленная в браузере по умолчанию. То же, что отсутствие атрибута
  • lazy : отсрочка загрузки ресурса до тех пор, пока он не достигнет расчетного расстояния от области просмотра
  • eager : немедленная загрузка ресурса, несмотря на его расположение на странице

Эта функция продолжит обновляться, пока не будет запущена в стабильной версии (не раньше Chrome 76). Но вы можете опробовать её, активировав следующие флаги в Chrome:

Порог расстояния загрузки

Все изображения и фреймы, видимые на странице без необходимости прокрутки, загружаются стандартно. Те, которые располагаются ниже области просмотра устройства, загружаются только тогда, когда пользователь прокручивает до них.

Читайте также:  Как настроить модем мтс для роутера

Расстояние, при котором начинается загрузка, не фиксировано и изменяется в зависимости от нескольких факторов:

  • тип ресурса, который должен быть загружен (изображение или фрейм)
  • включен ли «Lite mode» в браузере Chrome для Android
  • эффективный тип соединения

Вы можете найти значения по умолчанию для разных типов эффективных соединений в Chromium source. Эти показатели и даже подход загрузки при достижении определенного расстояния от области просмотра, могут меняться в ближайшем будущем, так как команда Chrome улучшает эвристику, чтобы определить, когда начинать загрузку.

В Chrome 77 вы можете экспериментировать с этими различными пороговыми значениями путем замедления скорости соединения в DevTools. Во время этого вам потребуется переопределить эффективный тип соединения в браузере с помощью флага chrome://flags/#force-effective-connection-type.

Загрузка изображений

Атрибут loading влияет на фреймы иначе, чем на изображения, в зависимости от того, является ли фрейм скрытым (скрытые фреймы часто используются для задач аналитики или общения). Chrome использует следующие критерии, чтобы определить, является ли фрейм скрытым:

  • ширина и высота фрейма 4px или меньше
  • применяются свойства display: none или visibility: hidden
  • фрейм расположен за пределами экрана с помощью отрицательного позиционирования по осям X или Y

Если фрейм соответствует любому из этих условий, Chrome считает его скрытым и не будет загружать в отложенном режиме в большинстве случаев. Фреймы, не являющиеся скрытыми, будут загружены только тогда, когда попадут в пределы порога загрузки. Для фреймов, которые все еще загружаются в режиме отложенной загрузки, отображается плейсхолдер

Есть ли планы расширить эту функцию?

Есть планы изменить режим отложенной загрузки браузера по умолчанию, чтобы автоматически отображать в таком режиме любые изображения и фреймы, загрузку которых можно отложить, если включен Lite mode в Chrome для Android.

Можно ли изменить расстояние до изображения или фрейма, при котором запускается отложенная загрузка?

Эти значения жестко закодированы и не могут быть изменены через API. Однако, они могут измениться в будущем, так как команда Chrome экспериментирует с разными пороговыми расстояниями и переменными.

Могут ли изображения, заданные через CSS-свойство background, получить атрибут loading?

Нет, в данный момент он может использоваться только тегами

Как работает атрибут loading с изображениями, которые находятся в области видимости, но не видны (например, карусель)?

В отложенном режиме загружаются только те изображения, которые находятся на определенном расстоянии от нижней грани области просмотра устройства. Все изображения выше области просмотра, независимо от того, видны они в данный момент, загружаются в обычном режиме.

Что, если я уже использую стороннюю библиотеку или скрипт для отложенной загрузки изображений или фреймов?

Атрибут loading не должен влиять на код, который в отложенном режиме загружает данные, но важно учитывать некоторые важные моменты:

  1. Если ваш сторонний загрузчик в отложенном режиме пытается загрузить изображения или фреймы раньше, чем их будет загружать Chrome в обычном режиме, то есть, на расстоянии, превышающем порог расстояния загрузки браузером, они все еще будут отложены и загружены по правилам обычного поведения браузера
  2. Если ваш сторонний загрузчик использует более короткое расстояние, чтобы определить, когда загружать конкретное изображение или фрейм, чем браузер, то поведение будет соответствовать настройкам вашего загрузчика

Одна из важных причин продолжить использовать стороннюю библиотеку параллельно с loading=«lazy» заключается в предоставлении полифила для браузеров, не поддерживающих данный атрибут.

Другие браузеры поддерживают встроенную отложенную загрузку?

Атрибут loading можно рассматривать, как прогрессивное улучшение. Браузеры, которые поддерживают его, могут загружать изображения и фреймы в отложенном режиме. Те, что не поддерживают — пока что загружают изображения как обычно. С точки зрения кроссбраузерной поддержки, атрибут loading поддерживается в Chrome 76 и любых браузерах, основанных на базе Chromium 76. Также существует открытый баг про реализацию данной функции в Firefox.

Похожее API было предложено и использовалось в IE и Edge, но оно было сфокусировано на понижении приоритетов загрузки вместо полного её откладывания.

Как поступить с браузерами, которые еще не поддерживают встроенную отложенную загрузку?

Создайте полифил или используйте стороннюю библиотеку, чтобы загружать изображения на сайте в отложенном режиме. Свойство loading может быть использовано для определения, поддерживается ли функционал в браузере:

Например, lazysizes — популярная JavaScript библиотека для ленивой загрузки. Вы можете определить поддержку атрибута loading , чтобы загрузить эту библиотеку только, когда loading не поддерживается. Это работает следующим образом

Демонстрация работы. Испробуйте это в таким браузерах, как Firefox или Safari, чтобы увидеть фолбек в действии.

Библиотека lazysizes также обеспечивает плагин встроенной загрузки, который использует встроенную отложенную загрузку, когда это возможно, и задействует функционал библиотеки, когда в этом есть потребность.

Как отложенная встроенная загрузка влияет на рекламу на странице?

Вся реклама, представленная в виде изображений или фреймов, также загружается в отложенном режиме, как любые другие изображения или фреймы.

Как изображения обрабатываются, если веб-страницу распечатать?

Хотя функционала нет в Chrome 76, существует открытая проблема, обеспечивающая немедленную загрузку всех изображений и фреймов при печати страницы.

Заключение

Использование встроенной поддержки ленивой загрузки изображений и фреймов может существенно облегчить повышение производительности веб-страниц.

Если замечаете любое необычное поведение при включении этой функции в Chrome, сообщите об ошибке.

Источник

Ленивая загрузка (Lazy loading): что это такое и как ее сделать на сайте

Ленивая загрузка (lazy loading) – это отказ от загрузки всего контента на странице, когда в этом нет нужды. При этом применяется маркер, сообщающий, что данные не загружены, но в случае необходимости их нужно будет загрузить.

Читайте также:  Опель не работает втягивающее реле

Применяя ленивую загрузку, картинки и прочие материалы на сайте подгружаются асинхронно, а конкретнее, после того, как полностью загрузится видимый фрагмент веб-страницы или исключительно при отображении видимой части окна браузера. Например, если посетитель не до конца проскроллит страницу, то изображения расположенные внизу, не будут загружаться.

Lazy loading актуален на многих ресурсах, особенно на тех, где есть изобилие картинок. Посетите любой онлайн-сервис с фотографиями в высоком разрешении и обратите внимание, как площадка подгружает фото только видное на вашем экране, а при скролле вниз новые фото начинают загружаться, как только появляются у вас на экране. По мере скроллинга происходит замена плейсхолдеров на изображения высокого разрешения.

Зачем применять ленивую загрузку на сайте?

Бывают нередкие случаи, когда определенный фрагмент страницы виден не всем, однако на его обработку или передачу материала затрачивается огромное количество ресурсов. Вот тогда и приходит время задуматься об отложенной загрузке, которая исключит генерацию и загрузку скрытых элементов до тех пор, пока их не понадобится просмотреть или использовать.

На заметку. Ленивая загрузка задействуется технологией AJAX, и она порождается событиями, отслеживаемыми посредством JavaScript. Поэтому перед использованием асинхронной загрузки важно учесть, что пользователям, у которых нет JS, функция будет недоступна, а роботы поисковиков не увидят скрытый скриптом контент.

А теперь поговорим о двух весомых причинах, по которым стоит сделать выбор в пользу отложенной загрузки:

  1. Если ваш веб-ресурс показывает статьи или предоставляет для посетителей различные функции при помощи JavaScript, то обязательно требуется загружать DOM. Как правило, скрипты перед выполнением нуждаются в загрузке объектной модели документа. Поэтому на сайте, содержащем изобилие фотографий и прочих изображений, lazy loading играет ключевую роль в том, останется посетитель на нем, или же сразу отправится на поиски конкурентов.
  2. Принцип асинхронной загрузки заключается в загрузке контента только в том случае, если посетитель проскроллил веб-страницу до того фрагмента, где он попадает в видимую часть браузерного окна. Проще говоря, фотографии не будут загружены, если пользователь не прокрутит страницу до этого места. И это положительно влияет на экономию трафика, в связи с чем многие пользователи, сидящие с гаджетов и те, у кого слабый интернет, оценят данную особенность ресурса по достоинству. В следующий раз они наверняка захотят посетить его снова.

Исходя из вышесказанного можно сделать вывод, что ленивая загрузка значительно повышает производительность сайта.

Разновидности ленивой загрузки

Отложенная загрузка бывает 3 видов:

  1. Скроллинг. Контент, не попадающий в видимую зону, загружается только после того, как посетитель ознакомится с изначальным материалом, уже загруженным, и прокрутит страницу вниз. Данный вариант асинхронной загрузки вы можете встретить в социальных сетях, где лента новостей никогда не заканчивается, а также в некоторых онлайн-ресурсах СМИ, интернет-магазинах и каталогах товаров и услуг. Применяя «бесконечный» скроллинг, важно обеспечить грамотную навигацию к главному меню, установив фиксированную панель или кнопку «наверх».
  2. Клик. Контент будет загружаться после нажатия пользователем на специальную ссылку по типу «подробнее». Еще примеры загрузки «по клику»: появление модальных окон и открытие полномасштабного изображения после нажатия на миниатюру. Данный метод отображения информации самый распространенный, однако он редко интересует пользователей. Если материал все же заинтересует посетителя или он очень важен для поисковиков, а скрыть его нужно только чтобы сэкономить пространство, то лучше внедрить функцию через стандартный JS, а не AJAX. Так контент будет загружаться, а отображаться лишь после нажатия.
  3. Фоновый режим. Допустим, посетитель уже загрузил документ и оставил его открытым. В таком случае в фоновом режиме можно загрузить, например, фото большого масштаба, которое ему будет необходимо для последующей работы с ресурсом. Данный способ существенно ускоряет функциональность сайта, но только в том случае, если вы загрузите реально нужные аудитории материалы. Чтобы не прогадать, изучите статистику посещений. Не забудьте также учесть, какая у пользователя скорость интернета, иначе вы только навредите ему.

Как сделать ленивую загрузку?

Чтобы улучшить производительность сайта, нужно создать скрипт ленивой загрузки изображений и контента. Существует много вариантов, как это сделать.

5 вариантов ленивой загрузки для изображений

Поговорим о самых распространенных и готовых решений ленивой загрузки для изображений.

№1. Стандартный lazy loading и отображение от David Walsh

В упрощенной версии данный скрипт ленивой загрузки представляет собой замену атрибута src на data-src в теге img:

Элементы img, содержащие атрибуты data-src, скрыты в CSS. После того, как картинки будут загружены, они плавно отображаются с применением переходов:

Затем JavaScript передает всем тегам img атрибут src, которые в итоге получают значение атрибута data-src. После загрузки всех изображений, data-src убирается из img:

Еще David Walsh предусмотрел фолбек в случае несрабатывания JavaScript, отличающийся эффективностью и простой реализацией. Однако его функции не предусматривают загрузку при скроллинге веб-страницы. Это значит, что браузер подгружает все изображения вне зависимости от того, «дошел» посетитель до них, либо нет. Да, фолбек позволяет показывать страницу быстрее, потому что картинки загружаются после HTML, однако экономии трафика не будет.

№2. Robin Osborne – ленивая загрузка с прогрессивным улучшением

Техника подразумевает ленивую загрузку, в которой JS применяется в качестве улучшения для стандартных CSS и HTML. Прогрессивное улучшение обеспечивает показ изображений для пользователей даже в том случае, если JavaScript, который и отвечает за их отображение, будет отключен или появится ошибка, блокирующая работу скрипта.

Прогрессивное улучшение обладает несколькими преимуществами:

  1. Техника актуальна как в случае отключенного, так и сломанного JS. Это важно, ведь скрипты часто подвергаются ошибкам.
  2. Она предоставляет юзерам простой доступ к материалам ресурса.
  3. Для реализации метода нет необходимости в использовании плагинов и фреймворков.
  4. Ленивая загрузка функционирует посредством скроллинга – фото не загрузятся, пока посетитель не докрутит страницу до соответствующего места.
Читайте также:  Как настроить установщик windows 10

Детальную информацию о решении Osborne можете узнать здесь.

№3. Плагин bLazy.js на простом JS

Данный скрипт мало весит, осуществляет асинхронную загрузку и работу с несколькими изображениями с целью экономии трафика и запросов на сервер. Его применение обеспечивает:

  1. Ленивую загрузку фоновых и добавляемых изображений.
  2. Поддержку устаревших браузеров, в том числе IE 7 и 8 версии.
  3. Загрузку картинок в прокручиваемом контейнере.
  4. Использование CDN для размещения плагина вне сервера.
  5. Загрузку всех элементов, содержащих атрибут src: скриптов, iframe и прочего.
  6. Асинхронную загрузку фотографий с учетом разрешения и размера экрана.

Стандартная реализация. Разметка:

Тег img требуется поменять:

  1. Добавить класс .b-lazy.
  2. В виде значения src применить плейсхолдер. Сэкономить число запросов на сервер помогут прозрачные инлайновые gif с кодом base. Но учтите, что на других страницах, где будут применяться те же изображения, не будет кэширования.
  3. Data-src показывает на картинку, которую требуется асинхронно загрузить.

JavaScript: укажите стандартный вызов bLazy и осуществите настройку объекта по карте опций:

№4. Плагин Lazy Load XT jQuery

Отличный плагин для удобного написания своего скрипта ленивой загрузки. Отметим, что есть полная версия jQuery плагина, где посредством асинхронной загрузки можно загружать видео, iframe и прочие теги, содержащие атрибут src, а есть упрощенная, посвященная исключительно простой отложенной загрузке.

Для использования плагина на сайте, нужно перед закрывающим тегом добавить jQuery-библиотеку, указав jquery.lazyloadxt.js (упрощенная версия) или jquery.lazyloadxt.extra.js (расширенная):

Есть также альтернативный вариант, позволяющий не использовать весь плагин – облегченный скрипт jqlight.lazyloadxt.min.js:

В изображениях замените src на атрибут data-src:

Плагин может активироваться автоматически, либо вы можете сделать это самостоятельно. Для этого просто введите:

Lazy Load XT jQuetry добавляет большое количество аддонов. К примеру:

  1. Добавив jquery.lazyloadxt.spinner.css, в процессе загрузки картинки есть возможность показывать анимированный спиннер.
  2. Подключив для сайта animate.min.css и указав в JS-файле $.lazyLoadXT.onload.addClass = ‘animated bounceOutLeft’; можно добавить из Animate.css различные эффекты для загрузки картинок.
  1. Работает с большим количеством браузеров.
  2. Поддерживает CDN, поэтому скрипты можно не загружать на сервер.
  3. Дает возможность асинхронно загружать медиа многих типов.
  4. Аддоны позволяют создавать красивые переходы, лениво загружать фоновые картинки и прочее.
  5. Изобилие вариантов использования lazy loading – на странице, в макетах со скроллингом по горизонтали или вертикали, в контейнере и т.д.
  6. Если не желаете задействовать весь плагин, можно подключить облегченный скрипт.
  7. В материалах сообщается, как действовать в случае отключения в браузере JavaScript.

Просмотреть все аддоны и варианты можете по этой ссылке.

№5. Размытое изображение от Craig Buckler

Вы наверняка замечали на некоторых сайтах, как основное изображение статьи сначала размытое, а потом загружается четкая картинка высокого качества. Есть несколько вариантов загрузки фотографий методом размытого эффекта. Один из лучших – Craig Buckler.

Преимущества техники заключаются в:

  1. Высокой производительности: небольшой размер JS-кода и CSS.
  2. Независимости от фреймворков и библиотек.
  3. Поддержке ретина экранов.
  4. Применении прогрессивного улучшения для сломанного JavaScript и устаревших браузеров.

Скачать код вы можете с хранилища сайта GitHub.

Ленивая загрузка для контента

Для начала нужно подключить библиотеку jQuery:

Суть метода заключается в том, чтобы с использованием AJAX загружать необходимый элемент div с левого файла на целевую страницу.

Далее занимаемся созданием основного блока, к примеру, с изображениями работ. Допустим, вы рисуете иконки, а дальше будете их загружать, нажимая на специальную кнопку. Для этого нужна следующая структура:

Все довольно просто и понятно. Но нужно уделить внимание div с id=»moreButton» и id=»loadingDiv», потому что они находятся в важнейшем скрипте, отвечающем за загрузку контента со сторонних документов. «Контейнером» портфолио выступает SmartPortfolio. MoreButton – кнопка, нажимая на которую происходит загрузка еще одного фрагмента портфолио. LoadingDiv – часть страницы, где будет отображаться текст в случае полного открытия портфолио или возникновения какой-либо ошибки.

К примеру, многие из тех, кто прочтут эту статью, затем протестируют скрипт через индексный файл в браузере, а не загрузив его на сервер. Будут получать оповещение об ошибке. А если еще и слабое интернет-соединение, то файлы будут загружаться дольше. Поэтому актуально написать сообщение или вставить картинку, дающие пользователю понять, что идет загрузка.

Вот и сам скрипт, для подключения которого нужно вставить код перед закрывающимся тегом body:

В структуре веб-ресурса страницы, откуда будут браться данные для загрузки при нажатии, находятся в папке pages. В ней 3 файла, последний из них пустой. Так предусмотрено логикой скрипта. Путь в нем имеет следующий вид:

Но при использовании иного пути важно заменить его в самом скрипте. То же самое нужно сделать, если вы применили другие ID:

Затем, как и упоминалось раньше, перед тегом body (закрывающимся), указываем скрипт:

Заключение

Ленивая загрузка позволяет ускорить производительность сайта и существенно сэкономить трафик за счет того, что объекты, находящиеся вне зоны видимости окна браузера, загружаются только после того, как это понадобится пользователю. Благодаря разнообразию видов асинхронной загрузки и вариантов ее внедрения, ее можно применять для различных типов веб-сайтов и их целевого трафика.

Оцените эту статью. Чтобы мы могли делать лучший контент! Напишите в комментариях, что вам понравилось и не понравилось!

Рейтинг статьи: 4.1 / 5. Кол-во оценок: 46

Пока нет голосов! Будьте первым, кто оценит эту статью.

Источник

Оцените статью