Пришёл заказчик: «Сайт обновили, а я вижу старую версию. Всё сломалось!» Звучит как проблема с хостингом, но нет. Это кэш. Браузерное кэширование — один из самых недооценённых источников головной боли в веб-разработке.
Что такое кэширование и почему оно вообще существует
Когда вы первый раз заходите на сайт, браузер скачивает файлы: HTML, CSS, картинки, скрипты. Кэширование говорит браузеру: «Сохрани эти файлы на будущее — они вряд ли изменятся». При повторном визите сайт загружается быстрее, сервер меньше нагружен.
Проблема в том, что «вряд ли» — не то же самое, что «никогда». И браузер не умеет автоматически понимать, когда контент обновился.
Три места, где кэш ломает жизнь
Браузерный кэш. Браузер сохраняет статику локально. Ctrl+F5 или Cmd+Shift+R обычно помогает. Но некоторые пользователи не знают об этом, и поддержка получает десятки одинаковых жалоб.
CDN. Если сайт использует CDN (Content Delivery Network), файлы лежат на серверах по всему миру. Очистка CDN-кэша может занять от 5 минут до часа. Это значит, что обновление «выкатилось», но часть пользователей ещё видит старьё.
Прокси и корпоративные сети. В офисах часто стоят прокси-серверы, которые кэшируют ответы. Они-то уж точно не знают, что вы обновили сайт в пятницу вечером.
Что происходит с клиентом
Клиент обновил каталог товаров. Цены изменились. Но заказчик звонит и говорит: «У вас цены старые». Он не врёт — он действительно видит старую версию. И абсолютно уверен, что это ваша ошибка как разработчика.
В этот момент начинается объяснительная работа. Скриншоты, инструкции по очистке кэша, иногда TeamViewer. Всё ради того, чтобы пользователь увидел его собственный сайт.
Как с этим жить
Версионирование файлов. Добавлять хэш в имя файла: styles.css?v=1698765432. При каждом обновлении меняется хэш, браузер считает файл новым и загружает свежую версию.
Cache-Control заголовки. Настроить правильные заголовки на сервере: короткий срок для часто обновляемых ресурсов, длинный — для статики. Но не все хостинги дают это настроить.
Ожидание + инструкции. Если вы знаете, что обновление будет заметным — предупреждайте клиента заранее. «Через 30 минут сайт обновится полностью, некоторые пользователи могут видеть старую версию в течение часа».
Автоматическая очистка. Использовать Service Worker, который сам проверяет обновления и предлагает пользователю перезагрузить страницу.
Вывод
Кэш — это не баг, это особенность. Он делает интернет быстрее для всех. Но когда вы что-то меняете, кэш работает против вас. Если вы работаете с клиентами и вам важно, чтобы обновления видели именно они — заложите время на «кэш-адаптацию» в каждый релиз. Это не техническая проблема, это организационная.
Комментарии
Пока нет комментариев. Стань первым!