SebWeo.com
Ви внесли правки в CSS, виправили критичний баг у JavaScript, завантажили файли на сервер і радісно повідомляєте клієнту: “Готово!“. А у відповідь чуєте: “Нічого не змінилося, все поїхало!” – Знайома ситуація? Ви кажете йому натиснути Ctrl+F5, і це допомагає. Але ви не можете зателефонувати кожному відвідувачу сайту і попросити натиснути заповітні клавіші.
Якщо ви правильно налаштували заголовки кешування (наприклад, max-age=31536000), браузер буде тримати старий файл “мертвою хваткою” цілий рік. У цій статті я покажу, як обійти цей механізм і змусити браузер завантажити нову версію файлу саме тоді, коли це потрібно вам.
Браузери ідентифікують файли в кеші за їхньою URL-адресою. Якщо адреса https://site.com/style.css не змінилася, браузер бере файл з кешу. Ідея “скидання кешу” (Cache Busting) полягає в тому, щоб змінити URL-адресу файлу при кожному його оновленні. Для браузера це буде абсолютно новий файл, який він зобов’язаний завантажити з сервера.
Ви просто додаєте знак питання та номер версії в кінці підключення файлу:
<!-- Стара версія --> <link rel="stylesheet" href="style.css?v=1.0"> <!-- Нова версія (після ваших правок) --> <link rel="stylesheet" href="style.css?v=1.1">
Коли ви вносите зміни, ви просто змінюєте цифру в коді. Браузер бачить style.css?v=1.1 як нову адресу і ігнорує стару кешовану версію style.css?v=1.0.
Змінювати цифри вручну — це незручно і можна забути. У PHP є чудова функція filemtime(), яка повертає час останньої зміни файлу. Ми можемо використовувати цей час як номер версії.
Чистий PHP:
<link rel="stylesheet" href="style.css?v=<?php echo filemtime('style.css'); ?>">
Тепер, як тільки ви перезапишете файл style.css на сервері, filemtime зміниться, URL зміниться, і всі користувачі автоматично завантажать нову версію.
У WordPress (правильний спосіб):
У файлі functions.php при підключенні стилів використовуйте 4-й параметр функції wp_enqueue_style для версії:
wp_enqueue_style(
'my-main-style',
get_stylesheet_directory_uri() . '/style.css',
array(),
filemtime(get_stylesheet_directory() . '/style.css') // Автоматична версія
);
Деякі проксі-сервери та CDN можуть ігнорувати параметри після знаку питання (?v=...) і все одно віддавати старий файл. Тому найнадійніший спосіб — змінювати саме ім’я файлу:
style.cssstyle.v123.css або style.a7b9c2.cssЦей метод зазвичай використовують системи збірки, такі як Webpack, Gulp або Vite. Вони автоматично генерують новий файл з хешем у назві при кожній компіляції.
Бувають ситуації, коли все пішло шкереберть, і вам потрібно гарантовано очистити все у користувача: кеш, куки, локальне сховище. Для цього існує спеціальний HTTP-заголовок Clear-Site-Data.
Ви можете додати його через .htaccess, Nginx або PHP. Але будьте обережні: це зітре ВСЕ, включно з авторизацією користувача.
Приклад у PHP (додати на одну сторінку):
<?php
// Очистити тільки кеш
header("Clear-Site-Data: \"cache\"");
// АБО очистити все (кеш, куки, storage) - обережно!
// header("Clear-Site-Data: \"*\"");
?>
Коли користувач завантажить сторінку з цим заголовком, його браузер слухняно видалить усі збережені дані для вашого домену.
Не забувайте, що між вашим сервером і користувачем часто стоїть CDN (наприклад, Cloudflare). Навіть якщо ви змінили версію файлу, CDN може віддавати стару копію.
Тому алгоритм дій при “жорсткому” оновленні такий:
filemtime).
Боротися з кешем вручну — справа невдячна. На мою думку, найкраще рішення — це налаштувати автоматичне версіонування файлів (через PHP filemtime або збиральники проєктів). Це “магія”, яка працює непомітно: поки ви не чіпаєте файл, користувачі беруть його з кешу (швидко), а як тільки ви його змінили — вони миттєво отримують оновлення.
Використовуйте автоматичне версіонування як стандарт у своїй розробці, і ви назавжди забудете про фразу “очистіть кеш” у розмовах з клієнтами.
Уявіть, що ви щоранку приходите в одну й ту ж кав'ярню і питаєте баристу: "Які…
Дуже багато людей недооцінюють те, що у них є, і переоцінюють те, чого у них…
Варто тільки повірити, що ви можете – і ви вже на півдорозі до цілі Теодор…
Успішний бізнес у 2025 році неможливо уявити без стабільної ІТ-інфраструктури. Від корпоративного сайту до CRM-системи…
WordPress роками був неперевершеним "монолітом": він відповідав і за зручну адмін-панель, і за збереження даних,…