Что происходит при исчерпании кэша на клиенте
Что проверяют
Понимаете ли вы, что «кэш на клиенте» это не одна сущность, а несколько хранилищ с разными лимитами и разным поведением при переполнении. Для тестировщика это вопрос про то, сумеете ли вы воспроизвести ситуацию и предсказать, где именно приложение сломается.
Как отвечать
Начните с разделения, потому что последствия у хранилищ разные:
- HTTP-кэш браузера вытесняется молча: приложение просто идёт в сеть заново или подтверждает валидатор ответом
304. Функционально ничего не ломается, страдает скорость; localStorageиsessionStorageимеют лимит порядка нескольких мегабайт на источник, запись синхронная, при переполненииsetItemбросает исключение. Если вызов не обёрнут вtry, падает вся ветка кода, а не только сохранение;- Cache API у service worker и IndexedDB делят общую квоту источника, и при нехватке места браузер вытесняет данные источника целиком. Приложение остаётся без офлайн-данных и без того, что считало сохранённым.
Дальше про проверки. Важно, что приложение переживает пустой кэш, что незавершённые данные не пропадают молча, что вместо белого экрана есть внятное сообщение. Воспроизводится это забиванием хранилища из консоли, очисткой данных сайта в панели разработчика и приватным режимом с почти нулевой квотой. Объём и лимит показывает navigator.storage.estimate(), а заявку на устойчивое хранилище делает navigator.storage.persist().
Где спотыкаются
Говорят про кэш вообще, одним словом. Вытеснение HTTP-кэша это просадка скорости, а исключение при записи в localStorage это отказ функциональности. В баг-репорте они выглядят одинаково, и разработчик получает задачу без воспроизведения.
Второе: проверяют отображение, но не сохранность. Тест «данные видно после перезагрузки» зелёный, а после вытеснения хранилища браузером черновик пропадает, потому что нигде, кроме клиента, он не лежал. Сценарий с очисткой данных сайта посреди работы стоит держать в обязательном наборе.
Третье: путают переполнение с протуханием. Пользователь видит старый интерфейс после выкатки, и это заводят как «переполнился кэш», хотя причина в заголовках и в именах файлов сборки. Смотреть надо на ответ сервера, а не на объём хранилища.