indexeddb空间不会自动释放,需开发者主动设计清理策略并配合用户手动干预:一、开发者侧须落地过期清理三步——写入加毫秒时间戳、为时间字段建索引、批量删除(100–500条/次)并校验;二、用户侧按需选择清理入口,如地址栏清除、chrome://settings/sitedata按域名删、开发者工具细粒度操作或手动删除文件夹;三、浏览器配额分全局限制(硬盘50%)和组限制(主域20%,硬上限2gb),超组限即报quotaexceedederror。

IndexedDB 本身不自动清理,空间不会“自己释放”——浏览器只在极端情况下(如全局限制触顶)才整站驱逐,且不可控。真正有效的空间管理,靠的是开发者主动设计清理逻辑 + 用户按需手动干预 两层配合。
一、开发者侧:必须落地的过期数据清理策略
写入即埋点、查询靠索引、删除讲批次,三步缺一不可:
- 写入时必加时间字段:统一用
Date.now()存expiresAt(有明确过期时间)或createdAt(按创建时间清理),别依赖字符串键名推断 - 建索引是性能分水岭:对象存储创建后立刻调用
createIndex('byExpires', 'expiresAt'),否则.where('expiresAt').below(now)会全表扫描,万级数据就卡死 - 删库不等于删数据:用游标逐条
delete()易超时;推荐批量收集 key 后调用store.delete(key),每次控制在 100–500 条,删完校验event.target.result状态,失败要重试
二、用户侧:按场景选对清理入口
不同浏览器提供不同粒度的清理能力,关键看你想清什么:
- 只清当前网站?Chrome/Firefox/Edge 都支持地址栏锁形图标 → “清除 Cookie 和网站数据”,一步清空该域名下所有 IndexedDB、Cache、Service Worker
- 知道哪个站占了 800MB?打开
chrome://settings/siteData(Chrome)或about:preferences#privacy→ “管理数据”(Firefox),按大小排序,点垃圾桶直接删整站 - 要细粒度操作?F12 打开开发者工具 → Application(Chrome)或 Storage(Firefox)→ IndexedDB 节点下右键删单个数据库,或点 “Clear storage” 勾选 IndexedDB 一键清空
- 怀疑底层损坏或想彻底重来?关闭浏览器后,手动删除用户目录下的
IndexedDB文件夹(QQ浏览器路径:%LocalAppData%\Tencent\QQBrowser\User Data\Default\IndexedDB\;Firefox 在配置文件夹内找storage文件夹)
三、配额机制:理解浏览器怎么“管空间”
不是所有数据都能无限存,浏览器有两级硬约束:
- 全局限制:约等于你硬盘可用空间的 50%,到顶后浏览器会自动整站删除最久未访问的站点数据(无法指定删谁)
-
组限制:每个主域(如 example.com)及其子域共享一个配额,上限为全局限制的 20%,但最低 10MB、最高 2GB —— 这个满了就不会再写入,直接报
QuotaExceededError
所以看到“存不进去了”,大概率是该网站自己撞到了组限制,而不是浏览器总空间不够。











