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以良好的性能实现我的应用程序,这意味着这样的包装器,如果实现得好,应该执行精细。可悲的是,情况还不是这样!
答案 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实现整理出来,这才是我的最佳解决方案。