11

我在我的 Web 应用程序中使用Redux PersistLocalForage 。我有一系列在登录时触发的操作,这些操作会更新有关用户的一些数据。触发所有操作并将数据以 JSON 格式保存在 indexedDB 后的 IndexedDB 大小约为 1.4Mb。

初始存储

但是,如果我刷新页面从而再次触发操作,或者如果注销并重新登录,即使 IndexedDB 中的值没有改变(我已经使用 JSON diff 工具仔细检查了),存储的大小也会继续增长。最终,Chrome 会在增长几 MB 后清除其中的一部分,但不会恢复到最初的正确大小。

存储容量大

IndexedDB JSON 完全相同,没有任何差异,但大小差异很大。有谁知道为什么会发生这种情况,我该如何预防?我还想知道 Chrome 何时/多久清除一次让我的 IndexedDB 混乱的任何数据,但我找不到任何参考资料。

非常感谢

4

2 回答 2

5

Chrome 使用 LevelDB 作为索引数据库的后备存储。你可以阅读更多关于 LevelDB 的信息:https ://github.com/google/leveldb

LevelDB 针对快速读写进行了优化。空间通过压缩被懒惰地回收。

于 2018-08-07T20:46:19.793 回答
3

我注意到我目前正在处理的 Web 应用程序中存在相同的行为。
在做了一些研究之后,我发现 Chrome 会保留旧的(已删除的)数据库文件,并且只会将它们标记为已删除。此外,它可能会进行一些性能优化,随着时间的推移可能会增加空间。
但是一旦达到特定大小,它会自动尝试压缩数据库。我想确认这种行为并添加了一些代码,一旦数据被写入数据库,它会自动重新加载网页。
就我而言,所需的空间IndexedDB增长到大约3.3MB。一旦达到这个大小,它就被压缩到大约1.3MB并开始再次增长。

于 2019-04-04T09:38:18.643 回答