IndexedDB索引的性能:选择并插入

时间:2018-07-26 23:22:36

标签: javascript performance indexeddb

问题1:

Q1.1

进行选择或插入操作的IndexedDB(JavaScript版本)的复杂性是什么?索引是否为“索引”?是排序还是散列?例如,当我们仅使用IDBKeyRange。时,是否要花费O(1),O(log(n))或O(n)的时间?

Q1.2

IDBKeyRange.bound怎么样?是先对索引排序然后再进行选择吗?

Q1.3

IDBObjectStore.add()的性能如何?

Q1.4

对于index.openCursor(),索引是否预先排序?

问题2:

我们正在使用IDBObjectStore.createIndex()创建索引。 如果问题1中的答案是“是”(这意味着索引已建立索引),那么如何使用已建立索引或未建立索引的选项创建索引?换句话说,我选择一些要排序或散列的索引,而另一些则不然。我们有这个选择吗?

1 个答案:

答案 0 :(得分:1)

该规范未规定性能特征。假设使用B-tree来实现是合理的,因此假设操作为O(log n),但是您需要在浏览器中测试实现。如果特定的浏览器在常规操作上的效果不佳,则可能值得将其报告为问题。

  

Q1.1 IndexedDB(Javascript版本)的复杂性是什么   选择还是插入?索引是否为“索引”?是排序还是散列?

索引已排序。 https://w3c.github.io/IndexedDB/#index-construct

  

Q1.2 IDBKeyRange.bound怎么样?是先对索引排序然后再进行选择吗?

查找与排序后的索引相反。

  

Q1.3 IDBObjectStore.add()的性能如何?

假设B树,O(log n)

  

Q1.4对于index.openCursor(),索引是否已预先排序?

是的。

尽管从技术上讲,实现可以延迟创建索引-规范不需要特定的性能或实现,只是结果难以区分。

  

问题2:...如何使用已建立索引或未建立索引的选项创建索引?换句话说,我选择一些要排序或散列的索引,而另一些则不然。我们有这个选择吗?

否-API没有公开这样的选项。