Настройка отложенной загрузки изображений (lazy load) 1С-Битрикс

Наша компания занимается разработкой, поддержкой и обслуживанием решений на Битрикс и Битрикс24 любой сложности. От простых одностраничных сайтов до сложных интернет магазинов, CRM систем с интеграцией 1С и телефонии. Опыт разработчиков подтвержден сертификатами от вендора.
Предлагаемые услуги
Показано 1 из 1 услугВсе 1626 услуг
Настройка отложенной загрузки изображений (lazy load) 1С-Битрикс
Простая
~1 рабочий день
Часто задаваемые вопросы
Наши компетенции:
Этапы разработки
Последние работы
  • image_website-b2b-advance_0.png
    Разработка сайта компании B2B ADVANCE
    1240
  • image_bitrix-bitrix-24-1c_fixper_448_0.png
    Разработка веб-сайта для компании ФИКСПЕР
    844
  • image_bitrix-bitrix-24-1c_development_of_an_online_appointment_booking_widget_for_a_medical_center_594_0.webp
    Разработка на базе Битрикс, Битрикс24, 1С для компании Development of an Online Appointment Booking Widget for a Medical Center
    582
  • image_bitrix-bitrix-24-1c_mirsanbel_458_0.webp
    Разработка на базе 1С Предприятие для компании МИРСАНБЕЛ
    749
  • image_crm_dolbimby_434_0.webp
    Разработка сайта на CRM Битрикс24 для компании DOLBIMBY
    657
  • image_crm_technotorgcomplex_453_0.webp
    Разработка на базе Битрикс24 для компании ТЕХНОТОРГКОМПЛЕКС
    981

Настройка отложенной загрузки изображений (lazy load) 1С-Битрикс

На странице каталога с 48 карточками товаров браузер по умолчанию загружает все 48 изображений при открытии страницы — включая те, что находятся за пределами видимого экрана. При среднем весе изображения товара 80–150 KB это 4–7 MB лишнего трафика на первую загрузку, которая тормозит Largest Contentful Paint и Time to Interactive.

Нативный lazy load

Современный и самый простой способ — атрибут loading="lazy" на теге <img>. Браузеры начиная с Chrome 77, Firefox 75, Safari 15.4 поддерживают его нативно:

<img src="/upload/product.jpg" loading="lazy" width="300" height="300" alt="...">

Атрибуты width и height обязательны — без них браузер не может зарезервировать место под изображение до его загрузки, что приводит к layout shift (CLS метрика).

В шаблонах компонентов Битрикс это добавляется в template.php компонента catalog.element и catalog.section:

<img src="<?= $item['PREVIEW_PICTURE']['SRC'] ?>"
     loading="lazy"
     width="<?= $item['PREVIEW_PICTURE']['WIDTH'] ?>"
     height="<?= $item['PREVIEW_PICTURE']['HEIGHT'] ?>"
     alt="<?= htmlspecialchars($item['NAME']) ?>">

Для изображений первого экрана (hero, первые 2–4 карточки в сетке) loading="lazy" использовать не нужно — это задержит их загрузку и ухудшит LCP.

JavaScript-реализация для старых браузеров и кастомных сценариев

Если нужна поддержка Safari до 15.4 или нестандартное поведение (например, прелоадер при загрузке), используется IntersectionObserver:

const lazyImages = document.querySelectorAll('img[data-src]');
const observer = new IntersectionObserver((entries) => {
    entries.forEach(entry => {
        if (entry.isIntersecting) {
            const img = entry.target;
            img.src = img.dataset.src;
            img.removeAttribute('data-src');
            observer.unobserve(img);
        }
    });
}, { rootMargin: '200px' });

lazyImages.forEach(img => observer.observe(img));

rootMargin: '200px' — изображение начинает загружаться за 200px до появления в viewport. Это предотвращает «моргание» при быстрой прокрутке.

Lazy load для фоновых изображений CSS

Фоновые изображения CSS (свойство background-image) нативный lazy load не поддерживает. Решение — добавлять класс loaded через IntersectionObserver и определять фон только для элементов с этим классом:

.banner { background-color: #f0f0f0; } /* placeholder */
.banner.loaded { background-image: url('/upload/banner.jpg'); }

Кейс и результат

Интернет-магазин, страница каталога с 60 товарами (3 колонки × 20 строк, большинство за fold). После добавления loading="lazy" на все карточки кроме первой строки: объём загружаемых изображений при первом открытии снизился с 6,2 MB до 1,1 MB. LCP снизился с 3,8 с до 1,9 с. При прокрутке пользователь не замечает задержки — изображения загружаются заранее благодаря rootMargin.

Настройка lazy load — это 4–8 часов работы: аудит шаблонов компонентов, добавление атрибутов, тестирование на реальных устройствах (важно проверить отсутствие CLS на мобильных). Для проектов с SSR или нестандартными слайдерами потребуется дополнительная настройка под конкретные компоненты.