Настройка WebP-конвертации изображений 1С-Битрикс

Наша компания занимается разработкой, поддержкой и обслуживанием решений на Битрикс и Битрикс24 любой сложности. От простых одностраничных сайтов до сложных интернет магазинов, CRM систем с интеграцией 1С и телефонии. Опыт разработчиков подтвержден сертификатами от вендора.
Предлагаемые услуги
Показано 1 из 1 услугВсе 1626 услуг
Настройка WebP-конвертации изображений 1С-Битрикс
Простая
~1 рабочий день
Часто задаваемые вопросы
Наши компетенции:
Этапы разработки
Последние работы
  • image_website-b2b-advance_0.png
    Разработка сайта компании B2B ADVANCE
    1173
  • image_bitrix-bitrix-24-1c_fixper_448_0.png
    Разработка веб-сайта для компании ФИКСПЕР
    811
  • 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
    564
  • image_bitrix-bitrix-24-1c_mirsanbel_458_0.webp
    Разработка на базе 1С Предприятие для компании МИРСАНБЕЛ
    745
  • image_crm_dolbimby_434_0.webp
    Разработка сайта на CRM Битрикс24 для компании DOLBIMBY
    655
  • image_crm_technotorgcomplex_453_0.webp
    Разработка на базе Битрикс24 для компании ТЕХНОТОРГКОМПЛЕКС
    976

Настройка WebP-конвертации изображений 1С-Битрикс

На типовом интернет-магазине Битрикс страница каталога грузит 40–80 изображений. JPEG и PNG весят в сумме 2–5 МБ — это секунды задержки на мобильном соединении. WebP при сопоставимом качестве даёт 25–35% выигрыша по размеру. Проблема в том, что «включить WebP» в Битриксе — не одна кнопка, а связка из нескольких механизмов, каждый из которых может молча не работать.

Как Битрикс обрабатывает изображения

Ядро использует модуль main (класс CFile) для хранения файлов и модуль resize_image для генерации превью. Физически ресайзер вызывается через \Bitrix\Main\Web\Image или через старый API CFile::ResizeImageFile(). Результаты кешируются в bitrix/cache/resize_cache/ с хешированными именами папок.

WebP-конвертация в Битриксе реализована двумя путями:

Путь 1 — серверная конвертация через PHP. Библиотека GD или Imagick конвертирует при ресайзе. Настраивается в bitrix/php_interface/dbconn.php или через административный интерфейс в разделе «Производительность».

Путь 2 — конвертация на уровне веб-сервера. Nginx/Apache отдаёт .webp-версию вместо оригинала, если браузер поддерживает формат (заголовок Accept: image/webp). Файлы конвертируются заранее — скриптом или демоном.

Настройка серверной конвертации

Проверка GD и Imagick

php -r "echo gd_info()['WebP Support'] ? 'WebP OK' : 'WebP NOT supported';"
php -r "echo (new Imagick())->queryFormats('WEBP') ? 'Imagick WebP OK' : 'fail';"

Если GD собран без WebP — нужен libwebp-dev и пересборка, либо переход на Imagick. На Bitrix VM проблем обычно нет — там Imagick с WebP идёт из коробки.

Конфигурация в Битриксе

В файле /bitrix/php_interface/dbconn.php добавляем:

define("BX_USE_MYSQLI", true);
define("CACHED_b_file", 3600);

Включение WebP в модуле resize — через настройки модуля main:

\Bitrix\Main\Config\Option::set('main', 'use_webp', 'Y');
\Bitrix\Main\Config\Option::set('main', 'webp_quality', '85');

После этого \Bitrix\Main\Web\Image::resize() будет возвращать .webp если клиент поддерживает формат. Проверить можно в таблице b_file — поле CONTENT_TYPE у новых превью должно быть image/webp.

Конвертация на уровне Nginx

Это производительнее: PHP не тратит CPU на конвертацию в момент запроса. Схема: при первом запросе генерируем .webp-версию рядом с оригиналом, Nginx проверяет её наличие и отдаёт если браузер поддерживает.

map $http_accept $webp_suffix {
    default   "";
    "~*webp"  ".webp";
}

server {
    location ~* ^/upload/.*\.(png|jpg|jpeg)$ {
        add_header Vary Accept;
        try_files $uri$webp_suffix $uri =404;
    }
}

Предварительная конвертация скриптом cwebp:

find /var/www/bitrix/upload -name "*.jpg" -o -name "*.png" | \
  xargs -P4 -I{} sh -c 'cwebp -q 82 "$1" -o "$1.webp" 2>/dev/null' _ {}

Запускать через cron раз в час для новых файлов — по дате изменения через find -newer.

Инвалидация кеша превью

После включения WebP старые превью в bitrix/cache/resize_cache/ остаются в JPEG/PNG. Нужно их удалить:

rm -rf /var/www/bitrix/bitrix/cache/resize_cache/*

Или через административную панель: «Управление сайтом» → «Производительность» → «Очистить кеш». После этого превью регенерируются при первом обращении — можно прогреть curl-скриптом по sitemap.

Типовые проблемы

WebP генерируется, но браузер получает JPEG. Nginx не передаёт заголовок Vary: Accept — CDN или кеширующий прокси отдаёт закешированную версию без учёта типа браузера.

Размер WebP больше оригинала. Бывает на мелких иконках (до 10×10 px) и PNG с малым количеством цветов. Стоит добавить проверку: если WebP больше оригинала на 10%, отдавать оригинал.

Ошибки в b_event_log. При включённой конвертации и отсутствии прав на запись в upload/ — Битрикс пишет ошибки. Проверить chown на директорию upload/ от имени пользователя веб-сервера.