2015-03-25 59 views
2

我们试图预先将我们的Web应用程序负载的大量数据缓存到索引数据库中。从我的性能测试来看,桌面浏览器(例如Internet Explorer)的速度不错,我可以在大约2秒内插入10,000条记录。但比较iPad上完全相同的功能则会降至30秒。这种比较只是让我失望了。提高大规模索引数据库的性能插入

有谁知道任何提示或技巧来将大型数据集插入到索引数据库中。我不知道它是否有可能,但是如果我们可以建立一个indexedDB服务器端的副本,并预先填充所有数据,然后将其发送给客户端,并将其存储到浏览器中。这些线是否可行?

谢谢

+0

看看这个问题http://stackoverflow.com/questions/25914265/indexeddb-slow-when-inserting/25924081#25924081 – 2015-03-30 15:12:42

+0

我不知道它改变任何东西,但如果您在台式机上测试Chrome,则差异可能很大程度上是由于Chrome和Safari之间的差异,并非完全归因于桌面和移动。请参阅http://stackoverflow.com/questions/41824512/indexeddb-has-bad-performance-on-ios/42604890#42604890 – nbrustein 2017-03-05 05:33:49

回答

0

你的数据是如何存储在indexeddb中的?您是否在使用多个对象库的单个对象存储库中执行所有操作?你是否立即需要所有的缓存数据?

如果您只有一个对象存储,您可以先存储您初始需要的所有数据,然后提交该事务并为其余所有数据创建一个新对象。通过这种方式,您可以在插入其他数据的同时开始检索初始数据。 IndexedDB是异步的,所以它应该阻止你。

如果您有多个对象存储,则可以使用相同的stratigy。首先立即填满你需要的对象库并延迟其他对象库。

或者可能考虑使用AppCache API而不是indexeddb api。使用这个你可以缓存一个包含你想要缓存的所有json对象的JavaScript文件。当你不需要太多的数据查询时,情况更是如此。

0

我有大量批量插入问题(100.000 - 200.000记录)。我已经使用Dexie库解决了我所有的IndexedDB性能问题。它有这个重要的特点:

Dexie有踢屁股表演。它的批量方法利用了 在indexedDB中的一个不为人所知的特性,它可以在不监听每个onsuccess事件的情况下存储 的东西。这可以最大限度地提高 的性能。

Dexie:https://github.com/dfahlander/Dexie.js