javascript - 我应该对 IndexedDB 使用 cursor.delete() 还是 objectStore.delete(id)?
问题描述
如果我想删除 IndexedDB 中的所有红色汽车,哪种方法更快?
transaction.objectStore("cars").index("color").openCursor("red").onsuccess = e => {
var row = e.target.result;
if(row) {
row.delete();
row.continue();
}
};
这种删除光标行的方法是直接的,但它需要使用openCursor
(而不是openKeyCursor
),不幸的是它会解析整个对象。
或者
var cars = transaction.objectStore("cars");
cars.index("color").openKeyCursor("red").onsuccess = e => {
var row = e.target.result;
if(row) {
cars.delete(row.primaryKey);
}
};
此方法不需要光标解析整个对象,但objectStore.delete()
可能需要重新执行搜索。
解决方案
cursor.delete()
本质上是类似cursor.source.delete()
. 这两种方法都涉及在当前事务上创建一个新请求。虽然 store 方法需要进行扫描才能找到它的值,而 cursor 方法不需要,但两者的性能配置文件大致相同。使用删除光标当前位置的值cursor.delete()
主要是为了方便,而不是优化。
推荐阅读
- python - 将 Lightstreamer 与 IG Index API 一起使用
- python - 为什么我在输出 GAN 模型上得到这些线
- node.js - MongoDB Atlas 连接在 Heroku for NodeJS 上不起作用
- reactjs - 带有graphql-request的SWR如何在swr中添加变量?
- java - Swagger 没有显示我的控制器。试过邮递员,我的端点仍然失败
- java - Oracle jpa 无法插入空值
- php - wordpress 管理面板,如何防止用户删除类别?
- javascript - 尽量减少浏览器刷新的网页设计实践
- c# - EF Core DbSet AddAsync 方法:是否应该在 100% 的情况下使用异步方法?
- reactjs - 使用 react 和 typescript 通过 mobx 更新 Todo 列表