Safari的dbeddb实现非常慢

时间:2014-10-03 18:31:50

标签: safari ios8 mobile-safari indexeddb

Apple最近在OSX上的iOS8 Safari和Safari 7.1中添加了对indexeddb的支持。我试图在一个Web应用程序中使用它,该应用程序在indexeddb中存储大约65,000条记录,并使用一些复合索引查询它们。

它为我工作,但与Chrome的indexeddb实现相比,它确实很慢。

具体而言......针对Chrome的indexeddb需要2ms的查询需要500毫秒才能对付Apple的indexedbb。此特定查询使用复合indexeddb索引(键中的2个字段),使用键的IDBKeyRange.only值返回约65,000个文档中的约100个文档。

我的应用程序也支持websql作为存储机制,当我在Safari中切换到它时,性能非常好。我的查询会在几毫秒后返回,就像Chrome一样。

其他人在Apple的indexeddb实施缓慢方面遇到了麻烦吗?有关如何使其更好地工作的任何建议,还是我们只需要等待Apple修复它?

我相信Apple的indexeddb实现实际上只是websql之上的一个包装器,而且我可以直接使用websql以良好的性能实现我的应用程序,这意味着这样的包装器,如果实现得好,应该执行精细。可悲的是,情况还不是这样!

2 个答案:

答案 0 :(得分:2)

我们已经看到了同样的事情。插入10000个对象的过程在Android上完成大约需要5到6秒,在iOS8上需要15分钟才能完成。

Safari是一个webkit浏览器,所以如果它使用相同的代码库:

https://github.com/WebKit/webkit/blob/master/Source/WebKit2/DatabaseProcess/IndexedDB

然后,IndexedDB(非常)基于SQLLite数据库。

答案 1 :(得分:0)

我也遇到过这个问题。但我也发现表越大越慢。我需要保存大约30,000条记录,从服务器获取大约2000个部分,然后插入。每个批次插入比前一个插入慢,直到插入超过80分钟。我们提出的解决方案(它非常丑陋)是为每个同步部分创建一个单独的对象存储。然后你必须处理多个对象/等的查询。但它确实使它可以使用。

直到apple得到他们的indexeddb实现整理出来,这才是我的最佳解决方案。