IndexedDB容量由浏览器动态分配,通常数GB但受系统空间与策略限制;扩容自动隐式发生,清理需用户或浏览器主动干预,配额共享于同源所有数据库。

IndexedDB 本身没有固定上限,它的容量由浏览器动态分配,通常可达数GB,但不会无限增长——它依赖系统可用空间与浏览器策略共同决定。清理不是靠“自动扩容后释放”,而是靠用户或浏览器主动干预;扩容则完全隐式发生,无需手动设置。
存储空间如何动态扩容
浏览器会根据设备总磁盘空间、当前占用比例和站点活跃度,实时调整单个源(origin)的 IndexedDB 配额。例如 Chrome 在空闲磁盘充足时可能允许某网站使用 2GB,而当系统剩余空间不足 10% 时,配额可能被收紧甚至触发自动清理临时数据。
- 扩容完全自动,开发者无法调用 API 手动申请更大空间
- 同一域名下所有 IndexedDB 数据库共享该 origin 的总配额
- Storage Bucket(Chrome 94+ 引入的新存储模型)进一步细化配额管理,按功能模块隔离,但对外仍统一计入站点总用量
- 若写入时抛出 QuotaExceededError,说明已触及当前配额上限,需先清理再写入
哪些操作会触发自动清理
浏览器仅在极端资源压力下才启用被动清理,且仅针对非持久化数据:
- 系统磁盘空间严重不足(如剩余<500MB)时,可能清除未标记为“持久化”的 IndexedDB 数据
- 隐私模式或无痕窗口中,所有 IndexedDB 数据在关闭窗口后立即销毁
- 部分 Android 版 Chrome 在内存紧张时会清退后台标签页的 Service Worker 及关联 IndexedDB 缓存
- 普通浏览模式下不会自动删除用户正常使用的 IndexedDB 数据,哪怕长期未访问
主动清理的四种可靠方式
遇到空间不足或数据异常,应按优先级逐层操作:
- 单站精准清除:访问问题网站 → 点地址栏锁形图标 → “网站设置” → 底部“Cookie及其他网站数据” → “删除数据”。一次清空该域名全部 IndexedDB、localStorage、Cache 和 Service Worker
- 批量站点排查:访问 chrome://settings/siteData → 按存储大小排序 → 找到高占用条目(如显示“1.2 GB”)→ 点右侧三点菜单 → “删除”
- 细粒度调试清理:F12 打开开发者工具 → Application 标签 → 左侧 Storage 区域 → 展开 IndexedDB、Cache、localStorage 等节点 → 右键对应条目选择“Delete database”或“Clear storage”
- 底层文件直删(慎用):关闭 Chrome 后,手动删除本地 IndexedDB 文件夹(Windows 路径:AppData\Local\Google\Chrome\User Data\Default\IndexedDB),适用于残留无法通过界面清除的 bucket 或损坏数据库
开发阶段的预防建议
避免后期陷入清理困境,前端应从设计源头控制体积:
- 定期调用 objectStore.clear() 或 db.deleteObjectStore() 清理过期数据,而非只增不删
- 对大文件(如视频片段、离线地图瓦片)使用 Blob 存储 + URL.createObjectURL(),而非全量存入 IndexedDB
- 关键业务数据启用 persisted 模式(通过 navigator.storage.persist() 请求持久化权限),降低被误删风险
- 监听 storage 事件或定期检查 navigator.storage.estimate() 返回的 usage/quotas 比值,提前预警

















