- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
当我从 indexedDB 读取数据(在我的例子中是超过 3000 项)时,它工作起来很慢。我使用什么浏览器并不重要。我在 Chrome 和 Safari 上得到了相同的结果。我使用 iPad 3 进行测试。在这个问题的范围内,我发现了以下有趣的事情:
当我在桌面版 Chrome 上打开我的客户端应用程序时,它以适当的方式运行。
如果我在 Safari 中使用WebSQL,它看起来不错但是当我在 Safari 中使用indexedDB时,它运行慢。
当我们在 iPad 3 上使用 Chrome 时,它的运行速度也慢。 (因为,Chrome 使用 indexedDB)
WebSQL 已被弃用,根据我的调查,indexedDB 在 iOS 上存在一些瓶颈(在我的例子中是 iOS 9.3.5 和 iPad 3)。对我来说最好的方法是找到适用于 Chrome(在 iOS 上)的解决方案。请写下您的想法和建议。谢谢!
最佳答案
更新:下面描述的测试描述了 Safari 中的一个问题,该问题似乎已在 10.12.4 测试版中修复。
这里有更多数据,但基本上我看到的和你看到的一样。我使用 bulkPut()
将不同数量的记录写入干净的 IndexedDB。我在 XCode 模拟器中运行的 Chrome、Safari 和 iOS 10.2 上执行了此操作。三者都在同一台 Macbook Pro 上运行。我使用的是 Dexie.js 包装器,所以这有可能是由于包装器而不是 IndexedDB 本身造成的。
我看到的是,我尝试写入的记录越多,iOS 和 Safari 的每条记录写入时间就越差,而无论我尝试写入多少条记录,Chrome 的每条记录写入时间几乎保持不变。
此表显示了每个浏览器中的记录/毫秒。
records Chrome Safari ios Simulator
100 5.26 0.63 1.54
500 4.63 0.92 0.62
1000 5.26 0.71 0.61
2000 4.23 0.09 0.16
5000 4.21 0.02 0.02
然后我尝试使用 put()
而不是 bulkPut()
来记录相同的记录。对于少量记录,并且总是在 Chrome 上,这要慢得多。但是对于任一 Safari 浏览器上的大量记录,这会更快:
records Chrome Safari ios Simulator
100 0.45 0.08 0.40
500 0.46 0.14 0.35
1000 0.51 0.20 0.36
2000 0.54 0.21 0.39
5000 0.38 0.19 0.60
如果这是正确的(我有点怀疑它在所有情况下都是正确的,因为它没有意义),那么我想最好的策略是在 Chrome 上使用 bulkPut,但在 Safari 上使用 bulkPut不超过 1000 条记录的 block ?看起来很可怕。我很想知道是否还有其他人对此有更多信息或其他建议。
关于ios - indexedDB 在 iOS 上表现不佳?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41824512/
是否可以从浏览器外部或创建它的域外部访问 IndexedDB? 我正在考虑将数据存储到与某个特定域相关的某些 IndexedDB 的情况,因为它总是这种情况,然后在第一个域不复存在后访问该数据,或将其
我有一个员工在断开连接模式下使用的渐进式网络应用程序。他们扫描商店中的库存商品,该应用程序搜索本地数据以查找扫描的商品(indexedDb 数据存储,约有 1/2 百万条记录)。 此数据通过 API
有人可以告诉我是否可以使用 index、openCursor 和 keyRange 在 indexeddb 对象存储上执行不区分大小写的搜索.... 我可以区分大小写并设法使用 toUpperCase
来自提供的示例here和 here 它们展示了创建请求,然后在发出请求后附加 onerror 和 onsuccess 处理程序。 var transaction = db.transaction(["
假设您正在构建一个框架 Foobar,并假设 Foobar 有一个函数 .coolstuff(),它会调用 IndexedDB 调用 .coolstuff2() 和 .coolstuff3(),当这两
只要您使用适当的 IDBTransaction,是否可以从单个事务中完成所有这些操作,而不是打开多个事务(读取表、写入表、写入另一个表等)? Mozilla 说:“保持事务处于事件状态的唯一方法是对其
我有一个小项目,将数据存储在浏览器的 IndexedDB 中。我想添加同步功能,以便用户可以在任何地方访问数据。 如何在远程服务器或服务器数据库中同步本地 IndexedDB 数据,以便我可以在任何地
我想在 onupgradeneeded 中更新我的 indexeddb 数据库的对象库之一。我想检查一下,如果这个索引存在于这个对象存储中,那么就不需要做任何更改。但如果不是,我想更新它的索引。 最佳
有没有办法检查 IndexedDB 数据库是否已经存在?当程序试图打开一个不存在的数据库时,该数据库被创建。 我能想到的唯一方法是如下所示,我测试 objectStore 是否已经存在,如果不存在,则
就目前而言,这个问题不适合我们的问答形式。我们希望答案得到事实、引用资料或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the
我的代码如下: ... var f1 = function(trans) { var store = trans.objectStore('ObjectStore'); store.clear
我在我的一页中创建了一个 IndexdDB 对象存储(让对象存储名称为“ShopStore”)。现在我想从不同的页面打开相同的对象存储。可能吗? 我的两个网页位于不同的域。 最佳答案 根据MDN您无法
我有一个 Epub 注释插件,用户可以在其中对 Epub 进行注释,但是注释文本存储在浏览器中的 indexeddb 数据库中,想将这些注释文本导出到文件中,而在其他系统中,我想将这些文件导入到我的
在之前的 IndexedDB 规范 ( http://www.w3.org/TR/2011/WD-IndexedDB-20111206 ) 中,IDBDatabase 事务的模式值很短。在当前规范(2
有没有办法对 IndexedDB 中的同一属性进行 OR 或 IN 查询? 换句话说,我如何得到结果, SELECT * FROM MyTable WHERE columnA IN ('ABC','D
据我了解,IndexedDB 是大多数跨浏览器在线数据库解决方案的方式。甚至可能在 FF 等浏览器中使用这个 polyfill。 我试图找到一个非常简单的页面,它使用 IndexedDB 最初填充数据
给定一个带有一个声明对象存储的 indexeddb 数据库: var objectStore = thisDb.createObjectStore("table", {keyPath: "id", a
我正在构建一个利用 IndexedBD 的网络应用程序。我来自 SQL 背景,所以概念不同。具体来说,我的理解是 indexedDB 中没有“外键”的真正概念。因此,我试图找出检索相关对象的最快方法,
我在不做任何其他修改的情况下升级版本时遇到此代码问题,我无法理解原因。 function create_registry() { var version = 1; var indexe
我使用下面的代码从 indexeddb 中选择所有列 this._connection.openDb(this._indexedDBLiveDBName); return this._
我是一名优秀的程序员,十分优秀!