IndexedDB 性能随着 IOS 上 objectStores 数量的增加而降低 13

IndexedDB performance degrades with number of objectStores on IOS 13

在测试我拥有的移动混合应用程序时,我注意到 iOS 上的性能与 Android 设备上的性能相比要差得多。经过进一步检查,似乎是 IndexedDB 导致了我的大部分问题。我也将 PouchDB 与 IndexedDB 一起使用,但这里的测试结果是在纯 IndexedDB 中完成的。

在我做的测试中,我创建了 1 个包含 1000 行简单数据(简单 key/value 对)的 objectStore。我还以 25 的增量打开不包含文档的 objectStores。在创建商店时,我还确保在 dbRequest.onsuccuess 中调用 database.close(),以防商店打开导致任何问题。 (虽然不确定我是否需要)

测试只运行了 objectStore.get(key) 1000 次。从每组数据中删除前 10 个离群值后,它就符合了这个图表。

Performance Chart of different devices using IndexedDB

从该图中可以看出,iOS 13 上的 IndexedDB 的性能显着降低了我以线性速率打开的更多 objectStores。在 iPhone Xs Max 上 iOS 13 的 150 个 objectStores,我记录了每个 objectStore.get(key) +40ms 的时间,而在我的 Android 设备上进行相同的测试,它一直一致的 3ms。即使在 iOS 12 运行 和 iPhone 6 上,objectStore.get(key) 仍然是一致的 2.5 毫秒。当我用更多的开销重新创建测试时,PouchDB 中也出现了同样的趋势。

该问题似乎同时影响网络应用和混合移动应用。自从 iOS 13 台设备以及我的桌面 Safari 13 出现此问题。 我想知道是否有其他人在 iOS13 设备 and/or Safari 13 上遇到过这些性能问题,或者我只是做错了什么?

编辑:

这是一张图表,其中包含 PouchDB 的性能,这引发了我的初步调查。 PouchDB 在 iPhone Xs Max 上花费了 +130 毫秒完成 pouchDB.find(),在桌面 Safari 13 上花费了 +60 毫秒。

Performance Chart of Different devices with IndexedDB and PouchDB

Safari 13.4 更新解决了 indexedDB 性能问题。