【发布时间】:2016-02-11 16:00:08
【问题描述】:
我正在从 Firebase 数据库中检索大型活动的参与者列表 - 大约 4,000 名参与者。每个都表示为大约 500 字节的 JSON 对象。
检索数据集后,我试图将其存储在持久的本地存储中。最初我尝试使用 Lawnchair.js 使用标准 DOM 存储(localStorage)。
我观察到,在使用这种方法插入数据集时,Chrome 的内存使用量上升到大约 2GB。此外,由于保存到 localStorage 是同步的,这会阻塞 DOM,并且应用会在 30 秒内无响应。
我认为这可能是 Lawnchair 问题,所以我现在尝试使用 IndexedDB 切换到 localForage。这有两个很大的改进:
- localForage 是异步的,因此应用保持响应状态
- 内存使用量根本没有增加
但是,将数据写入索引数据库大约需要 10 分钟。前 5 分钟,CPU 处于 30% 左右,没有任何内容写入索引数据库。最后 5 分钟 CPU 停机,写入速度缓慢(可能 10 条记录/秒)。
我的问题是: 这些行为是否正常?如果是,我怎样才能将这些数据(大约 2Mb)存储在持久的本地存储中,而不需要花费很长时间或消耗大量内存?
【问题讨论】:
-
有趣的是,我发现其他人谈论 localForage 将数千条记录写入索引数据库的速度很慢,例如github.com/mozilla/localForage/issues/301.
-
在尝试使用 localForage (github.com/thgreasi/localForage-setItems) 批量插入此扩展并放入一些性能计数器后,我发现现在只需 17 秒即可“完成”插入所有 4000 条记录。但是,如果我检查索引数据库记录计数,当我的代码完成时它仍然显示 0。观察计数,我发现插入在 25 秒左右开始发生,并且需要几分钟才能完成。
-
为什么不直接使用 indexedDB 呢?为什么要使用中间层?
-
好点乔希。我确实考虑过,但我认为 localForage 在处理 IndexedDB API 方面可能会比我做得更好。
标签: local-storage indexeddb lawnchair localforage