const {usage, quota} = await navigator.storage.estimate();
if (usage / quota > 0.8) await caches.delete('media-v1');

用了两周的离线应用突然要重新下载,Application 里 Cache Storage 只剩一个空壳,控制台提示 QuotaExceededError,站点总用量显示九百多兆。这类现象通常不是突然出现的,往前翻半天日志能看到苗头。

追下去是这么回事:同源下所有缓存共用一份配额,缓存几十个视频分片之后触顶,浏览器按整站清理,把不常用的缓存一起删了。写入时没有处理配额异常,失败被静默吞掉。

围绕「Cache Storage 配额」排查时,命令行跑一遍比在面板里点十次有用,面板会替你做掉不少隐式操作。同一份配置存在多处的,先确认改的是被加载的那一份。

新版本先放一台机器上跑一天再全量,问题一般在这段时间暴露。

处理上按这个顺序:把视频这类大文件从 Cache Storage 挪出去,改走浏览器自带的 HTTP 缓存;写入前用 navigator.storage.estimate() 看剩余空间,超过阈值就跳过;catch 里单独处理 QuotaExceededError,删掉最旧的一份再重试。

确认没问题再收工,连续缓存两天后配额占用稳定在六成以下,离线打开核心页面仍然正常。

作者 9823189