Google Chrome загаживает диск: CacheStorage и Service Worker


В папке…
C:\Users\<user>\AppData\Local\Google\Chrome\User Data\Default\Service Worker\CacheStorage
…хром у меня 20+ Гб стабильно копит раз в n-месяцев. Другие браузеры такой подлянки не делают. Приходится это вычищать каждый раз.

И да, это не обычный кэш картинок, а именно сервис-воркеры. Что происходит: при заходе на сайт браузер может зарегистрировать фоновый процесс — Service Worker. Он работает независимо от вкладок и живёт в фоне, чтобы обеспечивать оффлайн-доступ (который мне нах не нужон), быстрый запуск страниц (я это отключаю лол), push-уведомления (ВСЕГДА ВЫКЛЮЧАЮ, АЛО! хватит засирать мой комп!) и прочий клятый PWA (Progressive Web App = «прогрессивное» мать его веб-приложение). В общем, адский ад.

У этого механизма есть собственное CacheStorage API. В отличие от стандартного HTTP-кэша, где умный браузер сам решает, что хранить и когда вычищать, здесь управляет сам сайт (sic!) через JavaScript. То есть код страницы может сказать: «положи вот эти 100500 МБ скриптов и картинок, плюс десяток видеофрагментов, плюс JSON с данными», и браузер как болванчик без вопросов сложит всё это в CacheStorage. В результате на диске оказываются буквально копии ресурсов сайта, вплоть до сраных видосиков. Не, вещь полезная дико… но должны быть какие-то блин лимиты?!

Почему растёт именно у Chrome?
У него политика квот такая, что он разрешает CacheStorage занимать до 80% свободного места на системном диске (верхний потолок может доходить до 50–100 Гб). И пока юзверь вручную не почистит, данные там остаются. Ну а например, святой Firefox ограничивает жёстче: там такие кэши срезаются быстрее и не дают разрастаться до десятков гигабайт.

Как именно?
Архитектурно это выглядит так: каждая «domain origin» (сайт) получает свой namespace в CacheStorage. Внутри — ключ-значение хранилище, реализованное поверх LevelDB (ключи — URL ресурсов, значения — бинарные блобы с контентом). Ну и скотина Chrome хранит это прямо на диске в указанной папке.

Сделано по-идиотски. Никаких автоматических политик «очистить старое» там нет, пока не включится принудительное высвобождение места (Eviction), которое срабатывает только при @#$% нехватке свободного пространства.

И ведь самое занятное — в настройках браузера ты об этом даже не узнаешь. «Очистить кэш» вроде бы есть, но это затрагивает только обычный HTTP-кэш. CacheStorage продолжает жить своей жизнью. То есть пользователь думает, что всё почистил, а на самом деле на диске сидит этот тайный склад мусора, организованный сервис-воркерами.

<вырезано цензурой>


Запись опубликована в рубрике Google Chrome, Браузеры. Добавьте в закладки постоянную ссылку.

4 комментария на «Google Chrome загаживает диск: CacheStorage и Service Worker»

  1. AEZAMF говорит:

    Что делать.
    Это чудо заняло у меня 100 гб на ssd диске
    Как остановить это?

  2. Okinawa говорит:

    А как именно чистить ?
    у меня по адресу c:\Users\Windows\AppData\Local\Google\Chrome\User Data\Default\Service Worker\CacheStorage\ лежит 1.5 Гб какой-то хрени непонятной. Могу я просто вручную сделать DELETE всем файлам, которые лежат в папке Service Worker\CacheStorage\ ?
    Или это чревато ?

Добавить комментарий

🇬🇧 Attention! Comments with URLs/email are not allowed.
🇷🇺 Комментарии со ссылками/email удаляются автоматически.