Налаштування кешування на стороні браузера для 1С-Бітрікс

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

Налаштування кешування на стороні браузера для 1С-Бітрікс

Налаштування кешування на стороні браузера для 1С-Бітрікс

Повторний відвідувач завантажує сторінку за 4 секунди при тому, що логи показують TTFB 200 мс. Waterfall у DevTools пояснює: 80 запитів до статики, кожен з 304 Not Modified. Файли віддаються з кешу браузера, але браузер все одно запитує сервер «чи не змінився?». Правильно виставлені заголовки кешування виключають ці запити повністю.

Модель браузерного кешу

Браузер використовує два механізми:

Freshness — браузер знає, до якого моменту файл актуальний, і не звертається до сервера взагалі. Керується заголовками Cache-Control: max-age і Expires.

Validation — браузер запитує сервер «чи змінився файл?», використовуючи ETag або Last-Modified. Сервер відповідає 304, браузер використовує кеш. Економить трафік, але не RTT.

Мета — максимально використовувати Freshness для статики з версіонуванням і Validation для HTML.

Конфігурація nginx для Бітрікс

server {
    # HTML — короткий кеш з revalidation
    location ~* \.html?$ {
        add_header Cache-Control "no-cache, must-revalidate";
        etag on;
    }

    # CSS, JS з хешами в іменах (Vite/Webpack) — довгий кеш
    location ~* /build/assets/.*\.[a-f0-9]{8,}\.(css|js)$ {
        add_header Cache-Control "public, max-age=31536000, immutable";
        access_log off;
    }

    # Статика без хешів — помірний кеш
    location ~* \.(css|js)$ {
        add_header Cache-Control "public, max-age=604800";
        etag on;
    }

    # Зображення
    location ~* \.(jpg|jpeg|png|gif|webp|avif|ico|svg)$ {
        add_header Cache-Control "public, max-age=2592000";
        access_log off;
    }

    # Шрифти
    location ~* \.(woff|woff2|ttf|otf|eot)$ {
        add_header Cache-Control "public, max-age=31536000, immutable";
        add_header Access-Control-Allow-Origin "*";
        access_log off;
    }

    # Ресурси Бітрікс (без хешів)
    location ~* ^/bitrix/(js|css|fonts)/ {
        add_header Cache-Control "public, max-age=604800";
        etag on;
    }
}

immutable у Cache-Control — браузер не перевірятиме файл навіть при ручному оновленні сторінки (Ctrl+F5 не діє). Застосовувати лише до файлів з версійним хешем в імені.

Версіонування ресурсів у Бітрікс

Без версіонування довгий кеш небезпечний: оновили CSS, користувачі бачать старий дизайн тиждень.

Вбудований механізм Бітрікс — параметр sessid в URL ресурсів. Не ідеальний: змінюється при кожній сесії, ламає кеш частіше, ніж потрібно.

Через .htaccess / nginx map — додаємо в URL статики хеш від вмісту файлу при деплої:

# Скрипт у деплої: генеруємо версії
for f in /var/www/site/public/css/*.css; do
    hash=$(md5sum "$f" | cut -c1-8)
    # Створюємо symlink з хешем
    ln -sf "$(basename $f)" "${f%.css}.${hash}.css"
done

Vite/Webpack — якщо фронтенд збирається через Vite (як у цьому проекті), хеші в іменах файлів генеруються автоматично: app-B3vCf7Tf.js. Для таких файлів можна сміливо ставити max-age=31536000, immutable.

Інвалідація кешу Бітрікс через параметр

Для ресурсів без автоматичного версіонування використовуємо ручний параметр у шаблоні:

// У header.php шаблону
$version = '2024031301'; // оновлюємо при деплої

echo '<link rel="stylesheet" href="/css/custom.css?v=' . $version . '">';

Автоматизуємо: читаємо версію з файлу version.txt, що оновлюється CI/CD:

$version = trim(file_get_contents($_SERVER['DOCUMENT_ROOT'] . '/version.txt'));

Apache .htaccess

<IfModule mod_expires.c>
    ExpiresActive On

    ExpiresByType text/html "access plus 0 seconds"
    ExpiresByType text/css "access plus 1 week"
    ExpiresByType application/javascript "access plus 1 week"
    ExpiresByType image/jpeg "access plus 1 month"
    ExpiresByType image/png "access plus 1 month"
    ExpiresByType image/webp "access plus 1 month"
    ExpiresByType font/woff2 "access plus 1 year"
</IfModule>

<IfModule mod_headers.c>
    <FilesMatch "\.(css|js)$">
        Header set Cache-Control "public, max-age=604800"
    </FilesMatch>
</IfModule>

Перевірка

curl -sI https://site.ru/css/styles.css | grep -i "cache-control\|expires\|etag"

Chrome DevTools → Network → вибираємо ресурс → Headers: дивимось Cache-Control у Response Headers і from cache / from disk cache у стовпці Size при повторному завантаженні.