usage / quota 比值比 quota 本身更有意义,因 quota 是动态软上限(chrome 无交互时可能为0,safari 17.5 始终返回 {0,0},firefox 私密模式归零),而 usage 相对稳定,比值可跨平台反映存储压力;当比值 > 0.85 时写入失败概率显著上升。

不能直接用 navigator.storage.estimate() 得到“使用比例”这个精确值,但可以安全地估算是否接近容量瓶颈——关键在比值判断,而非绝对字节数。
为什么 usage / quota 比值比 quota 本身更有意义
浏览器返回的 quota 是动态软上限:Chrome 在无用户交互时可能返回 0,Safari(截至 17.5)始终返回 {usage: 0, quota: 0},Firefox 在私密模式下也会归零。而 usage 相对稳定(虽含压缩估算),两者比值能过滤掉这些平台差异。
- 当
usage / quota > 0.85,IndexedDB 写入失败概率明显上升; - 当
quota === 0,应降级为仅监听QuotaExceededError错误; - 避免用
(quota - usage) 这类固定阈值——移动端 quota 可能仅 200MB,桌面端却达 5GB,差值无跨设备可比性。
如何安全调用 estimate() 并处理常见失败
该方法必须在安全上下文(https:// 或 localhost)中执行,且首次调用最好绑定用户手势(如按钮点击),否则 Chrome 可能静默拒绝。
将调研报告、方案对比、数据分析、需求梳理、会议纪要、设计说明、代码评审、学习笔记等任务产物输出为可在浏览器直接打开的单文件 HTML,替代 Markdown 作为最终交付物。Markdown 在信息密度、视觉清晰度和可分享性上已跟不上 AI 产物的丰富度,HTML 能同时承载排版、表格、SVG 等。
- 用
try/catch包裹,捕获TypeError(navigator.storage未定义)、SecurityError(非安全上下文)、NetworkError(离线或权限异常); - 不依赖
DOMContentLoaded后立即调用——此时 StorageManager 可能尚未就绪,建议延迟 100ms 或等用户触发动作后再试; - 若连续两次调用都返回
quota: 0,跳过比值计算,转为监听 IndexedDB 的onerror和事务失败。
在 Service Worker 中监控更可靠,但有前提
Worker 环境下 navigator.storage.estimate() 表现更稳定(尤其配合 navigator.storage.persist() 后),但需注意:
- 必须在
install或fetch事件中调用,不能在全局作用域提前执行; -
persist()不保证成功,需检查返回布尔值:if (await navigator.storage.persist()) { /* 配额通常提升 */ }; - Cache API 缓存也计入
usage,所以清理旧缓存(caches.delete())后应重新调用estimate()更新比值。
真正容易被忽略的是:比值只反映“整体压力”,无法定位具体哪个存储在膨胀。如果发现 usage / quota > 0.9,下一步必须分别检查 indexedDB.databases()、caches.keys() 和 localStorage.length,否则你可能在清空 localStorage 的同时,IndexedDB 已占满 95% 配额。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!










