2016-02-10 115 views
0

我从Firebase数据库中检索大量与会者参加活动 - 大约有4,000名与会者。每个表示为大约500字节的JSON对象。如何将大型(2Mb)数据集存储在持久本地存储中?

检索数据集后,我试图将其存储在持久本地存储中。最初我尝试使用标准DOM存储(localStorage)使用Lawnchair.js。

我观察到的是,在使用此方法插入数据集时,Chrome的内存使用量上升至2GB左右。另外,因为保存到localStorage是同步的,所以这会阻止DOM,并且应用程序在30秒内无响应。

我认为这可能是Lawnchair问题,所以我尝试使用IndexedDB切换到localForage。这有2点很大的改进:

  1. localForage是异步的应用程序保持响应
  2. 内存使用情况完全不

但是爬,大约需​​要10分钟写数据索引分贝。前5分钟,CPU坐落在30%左右,没有任何东西写入索引数据库。最后5分钟CPU停机并开始写速度缓慢(可能为10条记录/秒)。

我的问题是这样的: 这些行为是否正常?如果是这样,我如何将这些数据(大约2Mb)存储在永久本地存储中,而不会花费时间或消耗大量内存?

+0

有趣的是,我发现其他人谈论localForage正在缓慢写几千记录索引数据库,例如https://github.com/mozilla/localForage/issues/301。 – quijames

+0

在尝试使用localForage(https://github.com/thgreasi/localForage-setItems)批量插入此扩展并放入一些性能计数器后,我发现现在只需17秒即可“完成”插入所有4000条记录。 但是,如果我检查索引数据库记录计数,它在我的代码完成时仍然显示为0。看到插入数量开始发生在25秒左右,需要几分钟才能完成。 – quijames

+0

为什么不直接使用indexedDB?你为什么使用中间层? – Josh

回答

0

如果有人感兴趣,我已经将问题缩小到这样一个事实,即使用localforage,我一直试图插入数以千计的键值对,值是一个JSON对象。这需要很长时间。而是先调用JSON.stringify(obj)并将该字符串作为值插入 - 速度提高了100倍以上。

enter image description here