5 приёмов ленивой загрузки изображений
Содержание:
- 🥧 Recipes
- 📺 Demos
- Принцип работы скриптов lazy-load
- API-интерфейс Intersection Observer
- 👨💻 Getting started — HTML
- 👨💻 Getting started — HTML
- Как активировать Lazy Load в WordPress?
- Why browser-level lazy-loading? #
- Инструкция по установке Lazy Load 2.0 на сайт
- The loading attribute #
- Как добавить ленивую загрузку (lazy load wordpress) с помощью плагина
- Popular Javascript libraries for lazy loading on your website
- Как использовать отложенную загрузку в WordPress
- Асинхронная загрузка картинок и фреймов
- What Lazy Loading Is and How it Works
- The 10 Best Lazy Load JavaScript Libraries:
- 1. Youtube LazyLoad
- 2. Progressive Image lazy Loading With Blur Effect
- 3. Responsive Image Lazy Load JS Library – lazysizes
- 4. Vimeo LazyLoad
- 5. lazyframe.js
- 6. Pure JavaScript Library For Lazy Loading Images – lazyload.js
- 7. Performant Element lazy Load Library – Lozad
- 8. Small Image Lazy Loader – yall.js
- 9. LazyTube
🥧 Recipes
This is the section where you can find ready to copy & paste code for your convenience.
CSS
imgnot()not() { visibility hidden; }
Just that, really.
Dynamic content
HTML
The HTML to use depends on your case, see other recipes’ HTML
Javascript
var myLazyLoad = new LazyLoad(); // After your content has changed... myLazyLoad.update();
Mixed native and JS-based lazy loading
HTML
<img class="lazy" alt="A lazy image" data-src="lazy.jpg" /> <iframe class="lazy" data-src="lazyFrame.html"></iframe> <video class="lazy" controls data-src="lazy.mp4" data-poster="lazy.jpg">...</video> <div class="lazy" data-bg="lazy.jpg"></div>
Javascript
// Instance using native lazy loading const lazyContent = new LazyLoad({ use_native: true // <-- there you go }); // Instance without native lazy loading const lazyBackground = new LazyLoad({ // DON'T PASS use_native: true HERE });
Scrolling panel(s)
HTML
<div class="scrollingPanel"> <!-- Set of images --> </div>
Javascript
var myLazyLoad = new LazyLoad({ container: document.querySelector(".scrollingPanel") });
If you have multiple scrolling panels, you can use the following markup and code.
HTML
<div id="scrollingPanel1" class="scrollingPanel"> <!-- Set of images --> </div> <div id="scrollingPanel2" class="scrollingPanel"> <!-- Set of images --> </div>
Javascript
var myLazyLoad1 = new LazyLoad({ container: document.getElementById("scrollingPanel1") }); var myLazyLoad2 = new LazyLoad({ container: document.getElementById("scrollingPanel2") });
Lazy functions
HTML
<div class="lazy" data-lazy-function="foo">...</div> <div class="lazy" data-lazy-function="bar">...</div> <div class="lazy" data-lazy-function="buzz">...</div> <div class="lazy" data-lazy-function="booya">...</div>
JS
// It's a best practice to scope the function names inside a namespace like `lazyFunctions`. window.lazyFunctions = { foo: function (element) { element.style.color = "red"; console.log("foo"); }, bar: function (element) { element.remove(element); console.log("bar"); }, buzz: function (element) { var span = document.createElement("span"); span.innerText = " - buzz!"; element.appendChild(span); console.log("buzz"); }, booya: function (element) { element.classList.add("boo"); console.log("booya"); } };
function executeLazyFunction(element) { var lazyFunctionName = element.getAttribute("data-lazy-function"); var lazyFunction = window.lazyFunctionslazyFunctionName; if (!lazyFunction) return; lazyFunction(element); } var ll = new LazyLoad({ unobserve_entered: true, // <- Avoid executing the function multiple times callback_enter: executeLazyFunction // Assigning the function defined above });
Use to avoid executing the function multiple times.
That’s it. Whenever an element with the attribute enters the viewport, LazyLoad calls the function, which gets the function name from the attribute itself and executes it.
Lazy initialization of multiple LazyLoad instances
HTML
<div class="horizContainer"> <img src="" alt="Row 01, col 01" data-src="https://placeholdit.imgix.net/~text?txtsize=19&txt=row_01_col_01&w=200&h=200" /> <img src="" alt="Row 01, col 02" data-src="https://placeholdit.imgix.net/~text?txtsize=19&txt=row_01_col_02&w=200&h=200" /> <!-- ... --> </div> <div class="horizContainer"> <img src="" alt="Row 02, col 01" data-src="https://placeholdit.imgix.net/~text?txtsize=19&txt=row_02_col_01&w=200&h=200" /> <img src="" alt="Row 02, col 02" data-src="https://placeholdit.imgix.net/~text?txtsize=19&txt=row_02_col_02&w=200&h=200" /> <!-- ... --> </div>
Javascript
var lazyLoadInstances = ; var initOneLazyLoad = function (horizContainerElement) { // When the .horizContainer element enters the viewport, // instantiate a new LazyLoad on the horizContainerElement var oneLL = new LazyLoad({ container: horizContainerElement }); // Optionally push it in the lazyLoadInstances // array to keep track of the instances lazyLoadInstances.push(oneLL); }; // The "lazyLazy" instance of lazyload is used to check // when the .horizContainer divs enter the viewport var lazyLazy = new LazyLoad({ elements_selector: ".horizContainer", callback_enter: initOneLazyLoad, unobserve_entered: true // Stop observing .horizContainer(s) after they entered });
That’s it. Whenever a element enters the viewport, LazyLoad calls the function, which creates a new instance of LazyLoad on the element.
📺 Demos
Didn’t find the that exactly matches your case? We have demos!
The demos folder contains 30+ use cases of vanilla-lazyload. You might find there what you’re looking for.
Type | Title | Code | Demo |
---|---|---|---|
Content | Simple lazy loaded images, not using any placeholder | Code | |
Content | Lazy images that use an inline SVG as a placeholder | Code | |
Content | Lazy images that use an external SVG file as a placeholder | Code | |
Content | Lazy responsive images with | Code | |
Content | Lazy responsive images with the tag and the attribute (art direction) | Code | |
Content | Lazy responsive images with and (using ) | Code | |
Content | Lazy responsive images with and (using plain ) | Code | |
Content | Lazy video with multiple tags, different preload options, NO autoplay | Code | |
Content | Lazy video with multiple tags, different preload options, WITH autoplay | Code | |
Content | Lazy loading background images | Code | |
Content | Lazy loading multiple background images | Code | |
Content | Lazy WebP images with the tag and the attribute for WebP | Code | |
Asynchronous loading LazyLoad with requireJS | Code | ||
Asynchronous loading LazyLoad + InterserctionObserver with requireJS | Code | ||
Asynchronous loading LazyLoad with | Code | ||
Asynchronous loading multiple LazyLoad instances with | Code | ||
Technique | Fade in images as they load | Code | |
Technique | Lazily create lazyload instances | Code | |
Technique | Lazily execute functions as specific elements enter the viewport | Code | |
Technique | How to manage the print of a page with lazy images | Code | |
Technique | A popup layer containing lazy images in a scrolling container | Code | |
Settings | Multiple scrolling containers | Code | |
Settings | Single scrolling container | Code | |
Methods | How to LazyLoad | Code | |
Methods | Adding dynamic content, then LazyLoad | Code | |
Methods | Adding dynamic content, then LazyLoad passing a NodeSet of elements | Code | |
Methods | Load punctual images using the method | Code | |
Methods | Load all images at once using | Code | |
Test | Test for multiple thresholds | Code | |
Test | Test behaviour with hidden images | Code | |
Test | Test performance, lazy loading of hundreds of images | Code | |
Native | Test the native lazy loading of images WITHOUT any line of javascript, not even this script | Code | |
Native | Test the native lazy loading of images conditionally using the option (see API) | Code |
Принцип работы скриптов lazy-load
Lazy-load или «ленивая» загрузка — это способ отображения контента на сайте, когда элементы, появление которых определяет внешний ресурс, загружаются не сразу вместе с запрашиваемой страницей, а асинхронно — по мере необходимости. К подобным элементам относятся, например, изображения () и фреймы (). Их объединяет наличие атрибута , указывающего на источник ресурса.
Когда браузер «видит» у элемента атрибут , то осуществляет сетевой запрос по указанному адресу, что увеличивает время полной загрузки документа. Соответственно, чем больше внешних ресурсов синхронно подключается к странице, тем медленнее она загружается. Чтобы избежать множества одновременных запросов и оптимизировать скорость загрузки, используется техника lazy-load.
Большое количество осуществляемых одновременно запросов к внешним ресурсам способно значительно увеличить время загрузки страницы, заставляя пользователя ждать.
Основы работы большинства скриптов «ленивой» загрузки описываются подобным алгоритмом:
- Элементы, которые необходимо загружать асинхронно, встраиваются на страницу с другим, временным значением атрибута (или вовсе без него, что неправильно с точки зрения валидации кода). Как правило, временное значение содержит адрес шаблона, который по весу на порядок легче оригинального исходника.
- При необходимости в атрибут вставляется оригинальный, исходный адрес ресурса. Как правило, эта замена может осуществляться двумя путями:
- По требованию пользователя, когда для элемента наступают события или .
- Автоматически при попадании элемента в пользовательский viewport путём проверки события , а также и для мобильных устройств.
Таким образом, при использовании lazy-load при первой загрузке страницы производится не одновременно несколько запросов к разным внешним ресурсам, а всего один — к временному шаблону, указанному в атрибуте , который кэшируется браузером, и только затем при необходимых условиях (наступление заданных событий) для выбранных элементов устанавливается их оригинальный .
Существует и иной подход, при котором можно обойтись без замещающих шаблонов для оригинальных ресурсов: элементы не встраиваются на страницу изначально, а создаются динамически в процессе просмотра или определенных действий пользователя (подобные манипуляции с DOM используются, например, при подключении скриптов статистики Google Analytics или Яндекс. Метрики) либо клонируются из Shadow DOM (по такому принципу работает элемент ).
API-интерфейс Intersection Observer
Intersection Observer API ‒ самый эффективный способ для браузеров определять, когда изображение попало в область просмотра. Данный подход работает быстрее, чем использование обработчиков событий. Для его реализации зарегистрируйте наблюдатель, чтобы просмотреть элементы и установить действие браузера, когда изображение попадет в область окна просмотра.
Intersection Observer API имеет хорошую поддержку браузерами, но еще не получил повсеместного распространения. Поэтому нужно использовать обработчики событий Javascript в качестве запасного варианта для несовместимых браузеров.
👨💻 Getting started — HTML
In order to make your content be loaded by LazyLoad, you must use some attributes instead of the actual attributes. Examples below.
Lazy responsive image with and :
<img alt="A lazy image" class="lazy" data-src="lazy.jpg" data-srcset="lazy_400.jpg 400w, lazy_800.jpg 800w" data-sizes="100w" />
To have a low quality placeholder, add the attribute pointing to a very small version of the image. E.g. .
Lazy responsive image with hi-dpi support using the tag:
<picture> <source media="(min-width: 1200px)" data-srcset="lazy_1200.jpg 1x, lazy_2400.jpg 2x" /> <source media="(min-width: 800px)" data-srcset="lazy_800.jpg 1x, lazy_1600.jpg 2x" /> <img alt="A lazy image" class="lazy" data-src="lazy.jpg" /> </picture>
To have a low quality placeholder, add the attribute pointing to a very small version of the image to the tag. E.g. .
Lazy responsive image with automatic WebP format selection, using the tag:
<picture> <source type="image/webp" data-srcset="lazy_400.webp 400w, lazy_800.webp 800w" data-sizes="100w" /> <img alt="A lazy image" class="lazy" data-src="lazy.jpg" data-srcset="lazy_400.jpg 400w, lazy_800.jpg 800w" data-sizes="100w" /> </picture>
To have a low quality placeholder, add the attribute pointing to a very small version of the image to the tag. E.g. .
Lazy background image
IMPORTANT NOTE: To display content images on your pages, always use the tag. This would benefit the SEO and the accessibility of your website. To understand if your images are content or background, ask yourself: «would my website user like to see those images when printing out the page?». If the answer is «yes», then your images are content images and you should avoid using background images to display them.
Single background image:
<div class="lazy" data-bg="lazy.jpg"></div>
Single background, with HiDPI screen support:
<div class="lazy" data-bg="lazy.jpg" data-bg-hidpi="lazy@2x.jpg"></div>
Multiple backgrounds:
<div class="lazy" data-bg-multi="url(lazy-head.jpg), url(lazy-body.jpg), linear-gradient(#fff, #ccc)" > ... </div>
Please note that you must use to wrap the URLs in your attributes.
Multiple backgrounds, HiDPI screen support:
<div class="lazy" data-bg-multi="url(lazy-head.jpg), url(lazy-body.jpg), linear-gradient(#fff, #ccc)" data-bg-multi-hidpi="url(lazy-head@2x.jpg), url(lazy-body@2x.jpg), linear-gradient(#fff, #ccc)" > ... </div>
Please note that you must use to wrap the URLs in your attributes.
Lazy video
<video class="lazy" controls width="620" data-src="lazy.mp4" data-poster="lazy.jpg"> <source type="video/mp4" data-src="lazy.mp4" /> <source type="video/ogg" data-src="lazy.ogg" /> <source type="video/avi" data-src="lazy.avi" /> </video>
Please note that the video poster can be lazily loaded too.
👨💻 Getting started — HTML
In order to make your content be loaded by LazyLoad, you must use some attributes instead of the actual attributes. Examples below.
Lazy responsive image with and :
<img alt="A lazy image" class="lazy" data-src="lazy.jpg" data-srcset="lazy_400.jpg 400w, lazy_800.jpg 800w" data-sizes="100w" />
To have a low quality placeholder, add the attribute pointing to a very small version of the image. E.g. .
Lazy responsive image with hi-dpi support using the tag:
<picture> <source media="(min-width: 1200px)" data-srcset="lazy_1200.jpg 1x, lazy_2400.jpg 2x" /> <source media="(min-width: 800px)" data-srcset="lazy_800.jpg 1x, lazy_1600.jpg 2x" /> <img alt="A lazy image" class="lazy" data-src="lazy.jpg" /> </picture>
To have a low quality placeholder, add the attribute pointing to a very small version of the image to the tag. E.g. .
Lazy responsive image with automatic WebP format selection, using the tag:
<picture> <source type="image/webp" data-srcset="lazy_400.webp 400w, lazy_800.webp 800w" data-sizes="100w" /> <img alt="A lazy image" class="lazy" data-src="lazy.jpg" data-srcset="lazy_400.jpg 400w, lazy_800.jpg 800w" data-sizes="100w" /> </picture>
To have a low quality placeholder, add the attribute pointing to a very small version of the image to the tag. E.g. .
Lazy background image
IMPORTANT NOTE: To display content images on your pages, always use the tag. This would benefit the SEO and the accessibility of your website. To understand if your images are content or background, ask yourself: «would my website user like to see those images when printing out the page?». If the answer is «yes», then your images are content images and you should avoid using background images to display them.
Single background image:
<div class="lazy" data-bg="lazy.jpg"></div>
Single background, with HiDPI screen support:
<div class="lazy" data-bg="lazy.jpg" data-bg-hidpi="lazy@2x.jpg"></div>
Multiple backgrounds:
<div class="lazy" data-bg-multi="url(lazy-head.jpg), url(lazy-body.jpg), linear-gradient(#fff, #ccc)" > ... </div>
Please note that you must use to wrap the URLs in your attributes.
Multiple backgrounds, HiDPI screen support:
<div class="lazy" data-bg-multi="url(lazy-head.jpg), url(lazy-body.jpg), linear-gradient(#fff, #ccc)" data-bg-multi-hidpi="url(lazy-head@2x.jpg), url(lazy-body@2x.jpg), linear-gradient(#fff, #ccc)" > ... </div>
Please note that you must use to wrap the URLs in your attributes.
Lazy video
<video class="lazy" controls width="620" data-src="lazy.mp4" data-poster="lazy.jpg"> <source type="video/mp4" data-src="lazy.mp4" /> <source type="video/ogg" data-src="lazy.ogg" /> <source type="video/avi" data-src="lazy.avi" /> </video>
Please note that the video poster can be lazily loaded too.
Как активировать Lazy Load в WordPress?
В предыдущем пункте мы загрузили необходимую библиотеку, теперь осталось ее активировать. Для ее нормальной работы, у каждого изображения на странице (тег img), должен быть указан параметр data-src, а стандартный src должен отсутствовать или быть пустым. Чтобы этого добиться, необходимо в файл functions.php вашей темы оформления, добавить следующие строки:images_lazy_load_wordpress.txt
$pattern — данным регулярным выражением, мы ищем необходимые атрибуты в теге img чтобы сформировать свой новый тег img, вместо стандартного, который генерируется движком WordPress.$replacement — тут мы формируем новый тег img, добавляем ко всем уже существующим классам дополнительный класс lazy, вместо src, мы используем data-src, а также переносим alt, width, height.
Т.е., если изначально тег img выглядел вот так:
То после обработки, он примет вот такой вид:
Если на вашем сайте вы активно используете srcset, то тогда вам надо будет самостоятельно модифицировать регулярное выражение. Чтобы формируемый тег img, помимо data-src, имел и правильно сформированный data-srcset (плагин jquery.lazy имеет поддержку srcset). Возможно, пригодится информация из данной статьи: http://scripthere.com/how-to-lazy-load-images-in-wordpress-without-plugin/
После этого осталось активировать отложенную загрузку изображений, для этого необходимо в соответствующий файл вашей темы оформления (у нас это файл footer.php) внести такие строчки:
Вносится они должны в теги script и только ПОСЛЕ успешной загрузки скрипта jquery.lazy.min.js
Why browser-level lazy-loading? #
According to HTTPArchive, images are the most requested asset type for most websites and usually take up more bandwidth than any other resource. At the 90th percentile, sites send about 4.7 MB of images on desktop and mobile. That’s a lot of cat pictures.
Currently, there are two ways to defer the loading of off-screen images:
- Using the Intersection Observer API
- Using , , or
Either option can let developers include lazy-loading functionality, and many developers have built third-party libraries to provide abstractions that are even easier to use. With lazy-loading supported directly by the browser, however, there’s no need for an external library. Browser-level lazy loading also ensures that deferred loading of images still works even if JavaScript is disabled on the client.
Инструкция по установке Lazy Load 2.0 на сайт
Итак, все как обычно.
1. Скачайте архив в конце статьи, разархивируйте и содержимое загрузите на ваш сайт удобным для вас способом.
2. Далее в секцию HEAD на всех страницах вашего сайта подключите ранее загруженный скрипт:
Не забывайте корректно прописывать адрес до скрипта на вашем сайте.
3. Перед закрывающим тегом </body> вы вставляете скрипт вызова плагина и стиль для скрытия отложенных изображений при отключенном в браузере JavaScript:
«img» в скрипте означает, что «лениво» загружаться будут все изображения. Можно поставить ограничение в виде определенного CLASS или ID.
4. Затем (не обязательно, но желательно), в секцию HEAD (обязательно в нее, а не в другое место или отдельный файл стилей) вставьте следующие правила:
Они позволят вам скрыть пока пустые теги img и показать их тогда, когда скрипт подгрузил их содержимое.
Для того чтобы более точно понимать принцип работы этого дополнения, рекомендую проверить ваш сайт с этими правилами и без них с обязательной очисткой кеша браузера при каждой проверке.
5. Пятый и он же, по сути, завершающий шаг. Здесь вам необходимо изменить принцип вставки изображения на сайт.
Стандартная конструкция вставки изображения в HTML выглядит так:
Различия с кодом ваших изображений могут быть лишь в разного рода атрибутах. Главное здесь то, что ранее используемый атрибут «src» вы заменяете на «data-src»:
Оригинальное изображение в теге <noscript> (как и сам тег) не обязательно, но желательно. Оно будет отображаться в том случае, если на стороне пользователя (в его браузере) отключена работа JavaScript.
После этих изменений изображения с новым атрибутом будут грузиться не все сразу, а постепенно, тогда, когда они попадают в область видимости, как об этом говорилось ранее.
По желанию можно не удалять атрибут «src» и прописывать в нем ссылку до превью (уменьшенной копии):
Соответственно, в таком случае до загрузки полного изображения будет показываться его превью.
Предвидя ваш вопрос «У меня куча изображений на сайте, мне что теперь, все руками изменять?», отвечу – я придумал один способ, как можно автоматизировать этот процесс.
The loading attribute #
Today, Chrome already loads images at different priorities depending on where they’re located with respect to the device viewport. Images below the viewport are loaded with a lower priority, but they’re still fetched as soon as possible.
In Chrome 76+, you can use the attribute to completely defer the loading of offscreen images that can be reached by scrolling:
Here are the supported values for the attribute:
- : Default lazy-loading behavior of the browser, which is the same as not including the attribute.
- : Defer loading of the resource until it reaches a from the viewport.
- : Load the resource immediately, regardless of where it’s located on the page.
Caution: Although available in Chromium, the value is not mentioned in the . Since it may be subject to change, we recommend not to use it until it gets included.
Distance-from-viewport thresholds
All images that are above the fold—that is, immediately viewable without scrolling—load normally. Those that are far below the device viewport are only fetched when the user scrolls near them.
Chromium’s implementation of lazy-loading tries to ensure that offscreen images are loaded early enough so that they have finished loading once the user scrolls near to them. By fetching nearby images before they become visible in the viewport, we maximize the chance they are already loaded by the time they become visible.
Compared to JavaScript lazy-loading libraries, the thresholds for fetching images that scroll into view may be considered conservative. Chromium is looking at better aligning these thresholds with developer expectations.
Experiments conducted using Chrome on Android suggest that on 4G, 97.5% of below-the-fold images that are lazy-loaded were fully loaded within 10ms of becoming visible. Even on slow 2G networks, 92.6% of below-the-fold images were fully loaded within 10ms. This means browser-level lazy-loading offers a stable experience regarding the visibility of elements that are scrolled into view.
The distance threshold is not fixed and varies depending on several factors:
- The type of image resource being fetched
- Whether Lite mode is enabled on Chrome for Android
- The effective connection type
You can find the default values for the different effective connection types in the Chromium source. These numbers, and even the approach of fetching only when a certain distance from the viewport is reached, may change in the near future as the Chrome team improves heuristics to determine when to begin loading.
In Chrome 77+, you can experiment with these different thresholds by in DevTools. In the meantime, you will need to override the effective connection type of the browser using the flag.
Как добавить ленивую загрузку (lazy load wordpress) с помощью плагина
Для большинства пользователей лучшим вариантом станет использование плагинов ленивой загрузки для WordPress.
Lazy Load
Данный плагин установили более 90 000 раз и его рейтинг достаточно высок – 4 звезды.
Lazy Load использует jQuery.sonar для загрузки изображений только тогда, когда они появляются в области просмотра. Разархивированный плагин весит всего 20 КБ.
BJ Lazy Load
Плагин BJ Lazy Load установили более 60 000 раз и его рейтинг так же высок. Он заменяет все изображения и фреймы (включая видео с YouTube и Vimeo) в контенте заполнителем до просмотра пользователем.
Lazy Load by WP Rocket
Lazy Load by WP Rocket выполняет ленивую загрузку изображений и фреймов. Включая миниатюры, содержимое виджетов, аватары и смайлики. Данный плагин не использует библиотеки JavaScript. Поэтому он весит менее 10 КБ.
Более 10 000 сайтов используют Lazy Load от WP Rocket, что вызывает доверие.
a3 Lazy Load
Это один из немногих плагинов в этом списке, который имеет дополнительные параметры конфигурации. Он подходит для ленивой загрузки изображений, видео и фреймов в записях, страницах, виджетах, миниатюрах и аватарах. a3 Lazy Load совместим с WooCommerce.
Плагин позволяет выбрать эффекты для изображений, которые появляются на сайте. Также можно указать, куда загружать его скрипт: в шапку или футер страницы (плагин ленивой загрузки, который сам себя загружает).
Данный плагин совместим с рядом мобильных и кэширующих плагинов, а также с сетями доставки контента.
Crazy Lazy
Этот плагин ленивой загрузки изображений использует мало ресурсов. Crazy Lazy задерживает загрузку изображений до того, как их увидит пользователь.
Также можно установить собственные заполнители с помощью CSS и заменить ими изображения.
Speed Up – Lazy Load
Еще один плагин отложенной загрузки изображений и фреймов. Он весит всего 5 КБ. Реализован шорткод для деактивации ленивой загрузки. В том числе и для отдельных изображений.
WordPress Infinite Scroll – Ajax Load More
Плагин WordPress Infinite Scroll позволяет добавить на сайт бесконечную прокрутку. Он предназначен для отложенной загрузки записей, комментариев и других элементов страницы.
WordPress Infinite Scroll также работает с WooCommerce и Easy Digital Downloads.
WP YouTube Lyte
Плагин позволяет размещать специальные ссылки на ролики, которые загружает проигрыватель YouTube только после нажатия.
Также можно использовать шорткоды для вывода видеоконтента или установить плагин для автоматического парсинга ссылок YouTube.
Альтернативный плагин ленивой загрузки видео – Lazy Load for Videos.
Popular Javascript libraries for lazy loading on your website
Since browser environments and implementation details can vary across browsers and devices, it is best to use a tried and tested library for lazy loading.
Here is a list of popular libraries and platform specific plugins that will allow you to implement lazy loading with minimal effort
- Uses Intersection Observer and falls back to event-based lazy loading.
- Supports all major HTML element types but not background-images.
- Works on IE11+ as well.
- Very popular and extensive functionality.
- Supports responsive images srcset and sizes attribute as well.
- High performance even without Intersection Observer.
jQuery Lazy
A simple, jquery based lazy loading library.
WeltPixel Lazy Loading Enhanced
A Magento 2 extension for lazy loading images.
Magento Lazy Image Loader
A Magento 1.x extension for lazy loading images.
- A Shopify extension for lazy loading images.
- It is paid though.
WordPress A3 Lazy Load
Image lazy loading plugin for WordPress.
Как использовать отложенную загрузку в WordPress
Можно добавить ленивую загрузку на WordPress- сайт с помощью плагинов или Javascript. Оба варианта дают схожие результаты.
Вариант 2. Использование JavaScript-библиотеки ленивой загрузки
Если вы хотите использовать JavaScript- библиотеку, есть много вариантов:
- react-lazyload – библиотека отложенной загрузки React, не использует Intersection Observer.
- js – использует только Intersection Observer, суперлегкая.
- blazy – тоже легкая, но не использует Intersection Observer.
- js – использует Intersection Observer и обработчики событий.
- lazysizes – подходит для ленивой загрузки видео и фреймов.
Также можно использовать jQuery, так как эта библиотека уже содержится в ядре WordPress.
Вариант 3. Использование плагина отложенной загрузки
Самый простой способ добавить ленивую загрузку на свой сайт – это использовать специализированный WordPress- плагин. Большинство платных плагинов для оптимизации изображений (например, Smush Pro) имеют встроенный функционал ленивой загрузки. Также мы добавили ее в бесплатную версию Smush, размещенную на WordPress.org.
Мы сделали процесс активации ленивой загрузки в плагине Smush предельно простым. Все, что нужно сделать, это перейти в раздел «Ленивая загрузка» плагина Smush Pro и нажать кнопку «Активировать».
Установите Smush Pro и активируйте ленивую загрузку меньше, чем за две минуты
Асинхронная загрузка картинок и фреймов
«Презентацию» скрипта lazy-load следует начать с некоторых разъяснений. Во-первых, для правильной работы скрипт должен запускаться после полной загрузки HTML и постройки DOM-дерева, т. е. наступления события . Во-вторых, в HTML-разметке у элементов, которые планируется загружать асинхронно, будет присутствовать атрибут , указывающий на оригинальный источник ресурса, — с его помощью происходит поиск элементов, для которых необходимо инициализировать lazy-load, поэтому, чтобы отложенная загрузка заработала на желаемом элементе, к нему достаточно будет добавить указанный атрибут с источником. В-третьих, при использовании скрипта следует заранее позаботиться о шаблонах, которые станут отображаться взамен оригинального элементов. Наконец, настройки скрипта учитывают варианты отображения оригинального контента — по требованию пользователя и автоматически, для чего применяются описанные выше события: , — непосредственно на самих элементах, а , и — для окна браузера, если требуется отследить попадание во viewport.
JavaScript
В качестве единственного аргумента в метод init() функции «ленивой» загрузки должен передаваться объект с предварительными настройками, содержащий:
- название селектора, по которому через выбираются необходимые элементы;
- указание на событие, активирующее замену атрибута на оригинальный, — , или (попадание во viewport);
- callback-функцию, вызываемую во время загрузки источника.
Скрипт представлен в самом тривиальном исролнении и работает по следующей схеме: выборка всех необходимых элементов на странице, проверка их на наличие атрибута и источника оригинального ресурса (атрибут ), установка событий на окно или на сами элементы в зависимости от выбранного способа отображения контента, замена у конкретного элемента на содержимое в при наступлении соответствующих событий. Для удобства добавлено информирование через консоль браузера об ошибках, возникающих при поиске элементов, при добавлении элемента без атрибута , при отсутствии или неудачной загрузке (событие ) оригинального источника. Если на сайте есть картинки, которые могут не загрузиться из-за ошибки в источнике, рекомендуется также добавить CSS для «сломанных» изображений.
Элемент, который еще не загрузился и содержит в своем шаблон, обладает атрибутом . При загрузке оригинального источника этот атрибут удаляется и добавляется новый — . Эти селекторы могут быть использованы для стилизации элементов.
CSS-оформление
Чтобы добавить к lazy-элементам CSS, можно указать следующие селекторы:
Благодаря callback-функции к загружаемой картинке можно добавить класс и настроить эффект появления на свой вкус. В примере ниже это реализовано посредством и .
What Lazy Loading Is and How it Works
Lazy loading images means loading images on your WordPress site asynchronously. In other words, loading images and other content on your web page at different times.
In a nutshell, here’s how lazy loading works: when someone visits your website, images will load above the fold, but the remaining images on the page will only download when they come into view on the user’s screen. In other words, lazy loading means deferring offscreen images.
Lots of image-heavy websites use this technique. As you scroll down the page, you’ll see placeholder images that quickly fill up with real images.
A great example is Medium, the popular blogging website.
Lazy loading in action on the Medium website.
As you can see from the image above, Medium displays a blurred placeholder image until the actual high-resolution image has fully loaded. Hence, visitors know that an image is coming.
Lazy Loading on Mobile
Lazy loading works on mobile as it works on desktop — and the same goes for how lazy loading should be implemented.
What’s more, mobile lazy loading gives users a higher benefit as they don’t have to consume any mobile data for loading images they don’t scroll to.
Please note that AMP for images doesn’t work the same. Amp-img uses JavaScript to handle lazy loading with a fallback to the main image if JS is disabled.
The 10 Best Lazy Load JavaScript Libraries:
1. Youtube LazyLoad
Demo Download
Yet another Youtube lazy loader that delays the loading of Youtube video player to improve the performance of your web page.
2. Progressive Image lazy Loading With Blur Effect
Demo Download
A small script to progressively load images with a blur effect. The script will show your low res image with a progressive blur until the high res image has been loaded entirely.
3. Responsive Image Lazy Load JS Library – lazysizes
Demo Download
lazysizes is an easy yet robust JS library used to delay the loading of images (iframes, scripts, etc) until they come into view, as well as loading the appropriate sources according to the breakpoints defined in the markup to fit any screen size. Designed for high performance websites to improve the page load time and to save the bandwidth.
4. Vimeo LazyLoad
Demo Download
Vimeo LazyLoad is the sibling project of the Youtube LazyLoad that load Vimeo video player on-demand when the user clicks on the play button & thumbnail image.
5. lazyframe.js
Demo Download
A native JavaScript library used to delay the loading of iframe content for Google Maps, Youtube/Vimeo/Vine videos and so on.
6. Pure JavaScript Library For Lazy Loading Images – lazyload.js
Demo Download
lazyload.js is a stand-alone JavaScript library for lazy loading images without any dependencies. It supports the attribute and with and takes best advantage from the progressive JPEG image format.
7. Performant Element lazy Load Library – Lozad
Demo Download
Lozad is a small (569 bytes minified & gzipped), highly performant JavaScript library used to lazy load any html elements (e.g. images, videos, etc.) using Intersection Observer Web API.
8. Small Image Lazy Loader – yall.js
Demo Download
yall.js is a really small JavaScript library to lazy load images as the users scroll through your content heavy webpage. Supports srcset attribute and picture element. Based on the Intersection Observer API.
9. LazyTube
Demo Download
An ultra-light Youtube video lazy load library which only loads/displays video thumbnails on the page and fetches the Youtube video player only when the thumbnail is clicked.