Налаштування WebP-конвертації зображень 1С-Бітрікс

Наша компанія займається розробкою, підтримкою та обслуговуванням рішень на Бітрікс та Бітрікс24 будь-якої складності. Від простих односторінкових сайтів до складних інтернет-магазинів, CRM систем з інтеграцією 1С та телефонії. Досвід розробників підтверджено сертифікатами від вендора.
Пропоновані послуги
Показано 1 з 1 послугУсі 1626 послуг
Налаштування WebP-конвертації зображень 1С-Бітрікс
Проста
~1 робочий день
Часті питання

Наші компетенції:

Етапи розробки

Останні роботи

  • image_website-b2b-advance_0.png
    Розробка сайту компанії B2B ADVANCE
    1262
  • image_bitrix-bitrix-24-1c_fixper_448_0.png
    Розробка веб-сайту для компанії ФІКСПЕР
    851
  • 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
    585
  • image_bitrix-bitrix-24-1c_mirsanbel_458_0.webp
    Розробка на базі 1С Підприємство для компанії МИРСАНБЕЛ
    751
  • image_crm_dolbimby_434_0.webp
    Розробка сайту на CRM Бітрікс24 для компанії DOLBIMBY
    657
  • image_crm_technotorgcomplex_453_0.webp
    Розробка на базі Бітрікс24 для компанії ТЕХНОТОРГКОМПЛЕКС
    989

Налаштування 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/ від імені користувача веб-сервера.