Настраиваем отложенную загрузку (lazy loading) для картинок в каталоге
Хочу себе такие же кнопкиЧто вы получите в результате
- Сокращение времени первого отображения страниц каталога.
- Снижение нагрузки на сервер и сеть за счёт загрузки только видимых изображений.
- Улучшение SEO: поисковые системы учитывают скорость загрузки при ранжировании.
Почему «ленивая» загрузка важна для Битрикса
Битрикс‑24 и 1С‑Битрикс используют модуль каталога, который часто выводит сотни миниатюр на одной странице. Каждый <img> сразу запрашивает файл, даже если пользователь никогда не прокрутит до него. Это приводит к:
| Проблема | Последствия |
|---|---|
| Большой объём запросов | Перегрузка веб‑сервера, рост CPU и RAM |
| Долгое время отклика | Пользователь видит пустой белый экран, повышается показатель bounce rate |
| Плохие метрики Core Web Vitals | Снижение позиции в поиске Google |
Lazy loading (отложенная загрузка) решает эти задачи, подгружая изображение только в момент, когда оно появляется в области видимости (viewport).
Как работает браузерный lazy loading
Современные браузеры поддерживают атрибут loading="lazy" у тега <img>. При его наличии:
- Браузер откладывает запрос до изображения, пока элемент не окажется в пределах видимой области.
- Как только пользователь прокрутит страницу и элемент станет видимым, запрос исполняется автоматически.
- При отсутствии поддержки атрибута (старые браузеры) можно подключить полифилл – небольшую JS‑библиотеку, которая имитирует тот же механизм.
Аналогия: представьте, что вы ждёте, пока ваш друг подойдёт к вам, прежде чем принести вам чай. Вместо того, чтобы сразу ставить чай на стол и ждать, пока он пройдёт весь дом, он принесёт его только когда вы будете рядом.
Подготовка проекта Битрикса к lazy loading
1. Обновление ядра и модулей
Убедитесь, что версия 1С‑Битрикс не ниже 18.5.0 – в ней уже есть поддержка loading="lazy" в шаблонах. Если версия ниже, выполните обновление через админку → «Обновление продукта».
2. Добавление атрибута в шаблон компонента каталога
Откройте файл шаблона, отвечающий за вывод миниатюры, обычно:
/local/templates/your_template/components/bitrix/catalog.element/template.php
Найдите строку, где формируется тег <img>:
<img src="<?= $arItem['PICTURE']['SRC'] ?>" alt="<?= $arItem['NAME'] ?>">
Измените её так:
<img src="<?= $arItem['PICTURE']['SRC'] ?>"
alt="<?= $arItem['NAME'] ?>"
loading="lazy"
width="<?= $arItem['PICTURE']['WIDTH'] ?>"
height="<?= $arItem['PICTURE']['HEIGHT'] ?>">
Почему указываем width/height? Это фиксирует размер блока до загрузки изображения, предотвращая «скачки» контента (layout shift), что положительно влияет на CLS (Cumulative Layout Shift).
3. Подключение полифилла (опционально)
Если нужно поддерживать IE11 или старые версии Safari, добавьте в footer.php:
<script src="https://cdnjs.cloudflare.com/ajax/libs/lazysizes/5.3.2/lazysizes.min.js" integrity="sha512-..." crossorigin="anonymous" referrerpolicy="no-referrer"></script>
И замените атрибут loading="lazy" на class="lazyload" и data-src:
<img data-src="<?= $arItem['PICTURE']['SRC'] ?>"
class="lazyload"
alt="<?= $arItem['NAME'] ?>"
width="<?= $arItem['PICTURE']['WIDTH'] ?>"
height="<?= $arItem['PICTURE']['HEIGHT'] ?>">
4. Кеширование шаблона
После правок очистите кеш в админке → «Настройки» → «Очистка кеша». Это гарантирует, что пользователи получат обновлённый HTML.
Оптимизация изображений перед отложенной загрузкой
Lazy loading ускоряет только процесс запроса, но если сам файл тяжёлый, выгода будет ограничена. Выполните следующие шаги:
| Шаг | Описание | Инструменты |
|---|---|---|
| Сжатие | Примените WebP или AVIF – они в 2‑3 раза легче JPEG/PNG. | cwebp, avifenc, онлайн‑сервисы |
| Размеры | Генерируйте мульти‑размерные версии (thumbnail, medium, large) и отдавайте нужный размер под текущий экран. | Resize в Битриксе, ImageMagick |
| CDN | Разместите изображения на CDN (например, Cloudflare, Yandex CDN) – запросы будут обслуживаться ближе к пользователю. | Интеграция через модуль «CDN» в Битриксе |
| Кеш‑заголовки | Установите Cache‑Control: max‑age=31536000 для статических файлов. |
.htaccess правила |
<FilesMatch "\.(png|jpe?g|webp|avif)$">
Header set Cache-Control "max-age=31536000, public"
</FilesMatch>
Тестирование эффективности
- Google Lighthouse – запустите аудит в Chrome DevTools → «Lighthouse». Обратите внимание на метрику Largest Contentful Paint (LCP) и Total Blocking Time (TBT).
- WebPageTest – включите «Filmstrip» и проверьте, как появляются изображения при прокрутке.
- Network в DevTools – отфильтруйте запросы по типу
img. Должны появляться только те, которые находятся в видимой части страницы.
Если после внедрения вы видите, что запросы всё равно идут сразу, проверьте:
- Отсутствие
loading="lazy"в HTML. - Конфликты с другими скриптами, которые могут принудительно менять атрибут
src. - Кеш браузера – откройте страницу в режиме инкогнито.
Частые ошибки и как их избежать
| Ошибка | Причина | Решение |
|---|---|---|
| Изображения не появляются | Забыл добавить width/height, из‑за чего браузер считает элемент «невидимым». |
Указывайте реальные размеры в атрибутах. |
| Появляются двойные запросы | Полифилл lazysizes и нативный loading="lazy" одновременно. |
Оставьте только один механизм. |
| Скролл «дергает» страницу | Отсутствие aspect-ratio и резкое изменение высоты блока после загрузки. |
Добавьте CSS aspect-ratio или фиксируйте высоту. |
| SEO‑проблемы | Поисковый робот не видит изображения из‑за lazy loading. | Добавьте noscript‑блок с обычным <img> внутри. |
<noscript>
<img src="/upload/imagename.jpg" alt="Текстовое описание">
</noscript>
Полный пример шаблона компонента
<?php if (!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true) die(); ?>
<div class="catalog-item">
<a href="<?= $arItem['DETAIL_PAGE_URL'] ?>">
<picture>
<source type="image/webp" srcset="<?= $arItem['PICTURE']['SRC_WEBP'] ?>">
<img src="<?= $arItem['PICTURE']['SRC'] ?>"
data-src="<?= $arItem['PICTURE']['SRC'] ?>"
class="lazyload"
alt="<?= htmlspecialchars($arItem['NAME']) ?>"
width="<?= $arItem['PICTURE']['WIDTH'] ?>"
height="<?= $arItem['PICTURE']['HEIGHT'] ?>"
loading="lazy">
</picture>
</a>
<h3><?= $arItem['NAME'] ?></h3>
<p class="price"><?= $arItem['PRICE'] ?> ₽</p>
</div>
Примечание: если ваш сервер поддерживает mod_pagespeed, он автоматически добавит
loading="lazy"к всем<img>. Тем не менее, ручное управление даёт гибкость и предсказуемость.
Практика для закрепления
- Внедрите lazy loading в шаблоне каталога вашего проекта, используя только атрибут
loading="lazy". Снимите скриншот Network‑таблицы до и после прокрутки, чтобы продемонстрировать уменьшение количества запросов. - Создайте полифилл‑решение: замените
loading="lazy"наclass="lazyload"и подключитеlazysizes. Проверьте работу в браузере без поддержки нативного lazy loading (например, Internet Explorer 11). - Оптимизируйте изображения: преобразуйте 5 самых «тяжёлых» файлов из каталога в формат WebP, измените шаблон, чтобы отдавать WebP через
<source>. Сравните размер загрузки до и после. - Тестируйте метрики: запустите Lighthouse до и после внедрения. Запишите значения LCP и CLS, объясните, почему они изменились.
- Обеспечьте SEO‑доступность: добавьте
noscript‑блоки к двум товарам и проверьте, что поисковые роботы (через Google Search Console) видят изображения.
Выполняя эти упражнения, вы закрепите теорию, увидите реальный эффект на скорости сайта и получите навыки, которые сразу можно применить в работе с клиентами, использующими Витрику. Удачной оптимизации!
CamZamZam - онлайн фото с вебкамеры с эффектами
Cartoon Network: игры с персонажами
Чат рулетка в 2026: будущие функции
Эксперт по доменным стратегическим решениям
Хостинг для e-commerce проектов
Как играть в слоты
Как настроить CDN для сайта на хостинге Host.bg
Как настроить SSL-сертификат для сайта на Host.bg
Как оптимизировать производительность сайта с хостингом Host.bg
Как выбрать правильный хостинг для вашего сайта
Какие бывают ЛОР болезни у детей
Кассовые терминалы с оплатой картами
LOL куклы витрина детская
Лучшие видеорегистраторы для водителей
Онлайн QR-код сканер
Онлайн-связь
Оптимизация производительности баз данных на хостинге Host.bg
Основы настройки веб-хостинга: что вам нужно знать
Партнёрская программа без блога: как получать трафик из Telegram
Профессиональные хитрости для пользователей хостинга Host.bg
Регистрация ИП в Москве для иностранных граждан
Сравнение хостинга Host.bg с другими провайдерами
Субтитры — нет, уши — включены: погружение в английский за 5 минут
Сумки с бусинами
Техника для строительства загородных трасс
ТОП-10 VPS для разработчика: рейтинг серверов под рабочие задачи
WordPress блог для бизнеса