Оптимизируем загрузку изображений — ресайзим под реальные размеры блока, а не выводим гиганты
Хочу себе такие же кнопкиЧто вы получите сразу
- Понимание, почему «гигантские» картинки тормозят ваш сайт на Битриксе.
- Чёткий план, как автоматически подгонять изображение под реальный размер блока, а не под размер экрана.
- Практические инструменты (PHP‑GD, Imagick, встроенный Resize‑модуль Битрикса) и готовый код‑сниппет, который можно внедрить уже сегодня.
1. Почему размер изображения важен
| Показатель | Что происходит без оптимизации | Что происходит после оптимизации |
|---|---|---|
| Трафик | 1 МБ → 5 МБ на каждый запрос | 1 МБ → 300 KB (экономия ≈ 70 %) |
| Время загрузки | 3‑5 сек на медленном соединении | < 1 сек |
| Потребление памяти сервера | Большие файлы → рост RAM/CPU | Маленькие файлы → стабильная нагрузка |
| SEO | Высокий LCP (Largest Contentful Paint) → штраф | Низкий LCP → рост позиций |
Аналогия: представьте, что вы пытаетесь заполнить маленькую чашку огромным кувшином воды. Чаша переполняется, а кувшин всё равно тяжёлый и громоздкий. Точно так же браузер «переполняет» свою память, получая файл, который в реальности не нужен.
2. Как браузер выбирает изображение
- Запрос – браузер скачивает файл, указанный в
src. - Декодирование – даже если изображение будет масштабироваться в CSS, браузер всё равно сначала загружает оригинал.
- Отображение – потом происходит ресайз внутри браузера, что тратит CPU и GPU.
То есть, если ваш блок имеет ширину 300 px, а в src указана картинка 2000 px, сервер отдаёт 2000 px, а браузер потом «сжимает» её до 300 px. Это лишняя работа, как если бы вы доставляли в офис целый грузовик, а потом отрезали всё, что не нужно.
3. Подготовка изображений на сервере
3.1. Выбор инструмента
| Инструмент | Плюсы | Минусы |
|---|---|---|
| GD (встроенный в PHP) | Доступен в любой сборке, прост в использовании | Медленнее при больших файлах |
| Imagick (ImageMagick) | Быстрее, поддерживает WebP, AVIF | Требует отдельной установки |
| Resize‑модуль Битрикса | Интегрирован в компонент CFile::ResizeImageGet |
Ограничен только Битриксом |
Рекомендация: если у вас уже установлен Imagick, используйте его – он экономит CPU и даёт лучшую компрессию. Если нет – GD справится с большинством задач.
3.2. Автоматический ресайз в Битриксе
<?php
use Bitrix\Main\Context;
function getResizedImage($fileId, $maxWidth, $maxHeight)
{
$arFile = CFile::GetFileArray($fileId);
if (!$arFile) return false;
// Параметры ресайза
$arSize = array('width' => $maxWidth, 'height' => $maxHeight);
$arResize = CFile::ResizeImageGet(
$fileId,
$arSize,
BX_RESIZE_IMAGE_PROPORTIONAL, // сохраняем пропорции
true, // возвращаем массив с URL
false,
false
);
return $arResize['src']; // готовый URL к вставке в <img>
}
?>
BX_RESIZE_IMAGE_PROPORTIONAL– сохраняет соотношение сторон, что избавит от искажений.- Функция может быть вызвана в шаблоне компонента, где известны размеры блока (например,
width="300").
3.3. Пример с Imagick
<?php
function resizeWithImagick($srcPath, $dstPath, $maxWidth, $maxHeight)
{
$img = new Imagick($srcPath);
$img->setImageOrientation(Imagick::ORIENTATION_TOPLEFT);
$img->thumbnailImage($maxWidth, $maxHeight, true, true);
$img->setImageFormat('webp'); // экономим ещё 30‑40%
$img->writeImage($dstPath);
$img->clear();
$img->destroy();
}
?>
thumbnailImageавтоматически сохраняет пропорции.- Формат WebP поддерживается в современных браузерах и в 3 в раз легче, чем JPEG того---
4. Адаптивные изображения в HTML
4.1. srcset и sizes
<img
src="/upload/resize/300x200_image.webp"
srcset="
/upload/resize/300x200_image.webp 300w,
/upload/resize/600x400_image.webp 600w,
/upload/resize/1200x800_image.webp 1200w"
sizes="(max-width: 600px) 100vw, 600px"
alt="Товар"
loading="lazy">
srcset– браузер выбирает подходящий размер в зависимости от DPR и ширины окна.sizes– указывает, сколько места займет изображение в разных условиях.loading="lazy"– откладывает загрузку до появления в области видимости (экономия трафика).
4.2. Элемент <picture> для разных форматов
<picture>
<source srcset="/upload/resize/600x400_image.avif" type="image/avif">
<source srcset="/upload/resize/600x400_image.webp" type="image/webp">
<img src="/upload/resize/600x400_image.jpg" alt="Товар">
</picture>
- При поддержке AVIF браузер возьмёт его, иначе WebP, иначе JPEG.
5. Автоматизация в административной панели Битрикса
- Создайте обработчик события
OnAfterFileSave. - Внутри обработчика вызывайте функцию ресайза, сохраняя несколько вариантов (300, 600, 1200).
- Сохраняйте полученные пути в пользовательские свойства файла (
CFile::Update).
AddEventHandler("main", "OnAfterFileSave", "ResizeAllVariants");
function ResizeAllVariants($arFields)
{
$sizes = [300, 600, 1200];
foreach ($sizes as $w) {
$dst = '/upload/resize/' . $w . 'x' . $w . '_' . $arFields['NAME'];
resizeWithImagick($arFields['TMP_NAME'], $_SERVER['DOCUMENT_ROOT'] . $dst, $w, $w);
// сохраняем путь в массив $arFields['DESCRIPTION'] или в отдельную таблицу
}
}
- После этого в шаблонах достаточно брать нужный вариант из
srcset.
6. CDN и кэширование
- CDN (Content Delivery Network) хранит готовые варианты изображений ближе к пользователю, сокращая RTT.
- При использовании VDSina вы можете подключить их CDN‑сервис: VDSina CDN.
- Включите Cache‑Control: max‑age=31536000 для статических файлов, чтобы браузер не запрашивал их каждый раз.
7. Проверка эффективности
| Инструмент | Что измеряет | Как использовать |
|---|---|---|
| Google PageSpeed Insights | LCP, размер изображений | Сканируйте страницу, ищите рекомендации «Serve appropriately sized images» |
| WebPageTest | Время до первого байта, размер загрузки | Сравните до/после внедрения ресайза |
| Битрикс‑мониторинг | Нагрузка CPU/Memory | Смотрите графики в админке → «Отчёты» → «Производительность» |
Если после всех правок LCP упал ниже 1,5 сек, а размер страницы сократился минимум на 30 %, значит вы на правильном пути.
8. Частые ошибки и как их избежать
| Ошибка | Почему происходит | Как исправить |
|---|---|---|
| Загрузка оригинала + CSS‑масштаб | Не указан srcset/sizes |
Добавьте srcset с реальными размерами |
Отсутствие alt |
Плохой SEO и доступность | Всегда задавайте атрибут alt |
| Сжатие без потери качества | Используется только JPEG с 100 % качеством | Перейдите на WebP/AVIF с качеством 80‑85 % |
| Не учитывается DPR | На Retina‑экранах изображение выглядит размытым | В srcset указывайте варианты 2× и 3× |
| Кеш не обновляется | После изменения изображения браузер показывает старую версию | Добавляйте параметр версии ?v=12345 к URL |
Практика для закрепления
- Анализ: откройте любой товарный лист вашего сайта, нажмите правой кнопкой → «Inspect → Network». Запишите размер файлов изображений (в КБ) и их реальные размеры в CSS.
- Код: реализуйте функцию
getResizedImage(см. пункт 3.2) и замените в шаблоне все<img src="...">на вызов этой функции с параметрами300×300. Проверьте, как изменились размеры файлов. - srcset: добавьте к одному из изображений атрибут
srcsetс тремя вариантами (300, 600, 1200). С помощью инструмента «Responsive Design Mode» в Chrome убедитесь, что браузер подбирает нужный файл. - Lazy‑load: включите
loading="lazy"для всех изображений в каталоге. Сравните время первой отрисовки (LCP) до и после. - CDN: если у вас есть доступ к 🏰 VDSina CDN, загрузите туда готовые варианты изображений и замените ссылки в
srcsetна CDN‑URL. Проверьте, как изменилось время отклика (RTT) в Chrome DevTools → «Timing».
Выполнив упражнения, вы увидите, как каждый из пунктов в реальном времени уменьшает нагрузку на сервер и ускоряет работу сайта.
Помните: правильный размер изображения – это не только «меньше байт», но и «меньше работы для браузера». Оптимизировав процесс уже на сервере, вы даёте пользователю мгновенную реакцию, а поисковикам – более высокий рейтинг. Удачной оптимизации!
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 блог для бизнеса