Если старый service worker продолжает обслуживать сайт, пользователь может видеть устаревшие JS, CSS, HTML или API-ответы даже после нового деплоя. Особенно часто это ломает PWA и сайты с офлайн-кешем.
Сначала проверьте Application > Service Workers и Cache Storage в DevTools: какой worker активен, какие файлы закешированы и обновляется ли версия.
Коротко: что делать
- Проверить активный service worker и дату его установки
- Посмотреть Cache Storage и версии кешей
- Проверить стратегию для HTML, JS, CSS и API
- Проверить skipWaiting и clientsClaim
- Проверить, меняются ли имена файлов при build
Основные причины
У этой проблемы редко бывает одна универсальная причина. Обычно нужно проверить связку настроек, данных, кода и внешних сервисов, а потом уже выбирать способ исправления.
- Service worker установлен, но новый ждет закрытия вкладок
- HTML кешируется слишком агрессивно
- Cache name не меняется между релизами
- Старые assets не удаляются в activate event
- Пользователь держит открытую вкладку со старым worker
Пошаговая диагностика
Диагностику лучше вести от конкретного примера: один пользователь, один запрос, один документ, одно событие или один экран. Так проще увидеть точку, где система начинает вести себя неправильно.
- Открыть DevTools и включить Update on reload для проверки
- Сравнить версию JS-файла в HTML и в cache
- Проверить install/activate логи service worker
- Проверить response source: network или service worker
- Проверить поведение после закрытия всех вкладок
Как исправить проблему
Исправление должно закрывать корневую причину, а не только внешний симптом. Если проблема связана с доступами, платежами, данными или безопасностью, сначала стоит сделать резервную копию и проверить правку на тестовом сценарии.
- Версионировать cache name и чистить старые кеши в activate
- Не кешировать HTML как immutable
- Настроить skipWaiting/clientsClaim с понятным UX обновления
- Разделить стратегии для assets, HTML и API
- Добавить кнопку или уведомление обновить приложение
Безопасный план решения
Не удаляйте service worker грубо для всех без проверки, если сайт реально должен работать офлайн. Сначала исправьте стратегию обновления и кешей.
Чего не стоит делать
- Не кешировать index.html навсегда
- Не оставлять один cache name на все релизы
- Не считать hard refresh решением для всех пользователей
- Не смешивать API-кеш и assets без правил
Что подготовить перед исправлением
- Ссылка на сайт
- Файл service worker
- Стратегия кеширования или Workbox config
- Как пользователи видят старую версию
FAQ
Почему у меня новая версия, а у клиента старая?
У клиента может быть активен старый service worker и старый кеш. Обычный деплой не всегда сразу его заменяет.
Можно ли удалить service worker?
Можно, если PWA/офлайн больше не нужны. Но лучше сначала понять последствия.
Как правильно обновлять PWA?
Версионировать кеши, чистить старые assets и показывать пользователю понятное обновление.
Когда стоит обратиться за помощью
Помощь нужна, если после релиза пользователи массово видят старый интерфейс, ошибки JS или неправильные API-данные.
Итог
Начните с DevTools Application и Cache Storage. Если нужно исправить service worker, PWA-кеш и обновление сайта, можно написать в Telegram @rabotator_support.