Ленивая загрузка (lazy loading) — это техника, при которой контент (чаще всего изображения) загружается только тогда, когда он попадает в поле зрения пользователя. Это позволяет:
В этой статье — простой и эффективный способ реализовать lazy loading на чистом JavaScript без сторонних библиотек.
Мы используем современный Intersection Observer API, который позволяет отслеживать, когда элемент появляется в области просмотра. Это энергоэффективно и не вызывает «лагов» при прокрутке, в отличие от обработки события scroll.
Изображения сначала содержат плейсхолдер (можно использовать маленькое размытое изображение или просто оставить src пустым), а реальный путь к картинке хранится в атрибуте data-src:
<img src="data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='1' height='1'%3E</svg>"
data-src="путь/к/реальной/картинке.jpg"
alt="Описание изображения"
class="lazy">
Плейсхолдер в src — это 1×1 прозрачный SVG. Он гарантирует, что браузер не будет пытаться загрузить «пустой» src, и при этом изображение не «прыгает» при загрузке.
Добавьте этот скрипт перед закрывающим тегом </body> или оберните в DOMContentLoaded:
document.addEventListener("DOMContentLoaded", () => {
const lazyImages = document.querySelectorAll("img.lazy");
if ("IntersectionObserver" in window) {
const imageObserver = new IntersectionObserver((entries, observer) => {
entries.forEach(entry => {
if (entry.isIntersecting) {
const img = entry.target;
img.src = img.dataset.src;
img.classList.remove("lazy");
observer.unobserve(img);
}
});
});
lazyImages.forEach(img => imageObserver.observe(img));
} else {
// Fallback для старых браузеров (например, IE11)
lazyImages.forEach(img => {
img.src = img.dataset.src;
img.classList.remove("lazy");
});
}
});
data-src, особенно если указаны alt и семантическое описание.Этот подход можно расширить:
data-bg)Если вы используете PHP, React или другой фреймворк — логика остаётся той же: подставляйте data-src вместо src, а скрипт сам подгрузит картинку в нужный момент.
Ленивая загрузка — один из самых простых и эффективных способов ускорить сайт. Реализация на чистом JavaScript занимает меньше 20 строк кода, но даёт ощутимый прирост в производительности и UX. Внедряйте — и ваши пользователи (и Google) скажут вам спасибо.
Есть вопросы или идеи для улучшения? Пишите в комментарии — обсудим!
Блог только запустил, все статьи генерирую через нейросеть т.к. лень, возможны ошибки. Просто чтобы вы знали и не запускали ядерный реактор по моим статьям ))
Если у вас есть вопросы, или Нашли неточность? пишите в коментах — вместе поправим и сделаем статью более качественной. Я лично объясню нюансы из практики.
Комментарии
Пока нет комментариев. Будьте первым!