gpt4 book ai didi

javascript - IndexedDB 的包装函数

转载 作者:数据小太阳 更新时间:2023-10-29 03:52:21 24 4
gpt4 key购买 nike

我需要为 iPad/平板电脑设备构建一个离线 HTML5 网络应用程序,用户可以在其中从服务器下载数据集(数据表)并将其存储在设备上。然后用户可以断开与服务器的连接并在设备上本地查看/编辑数据。这适用于在没有蜂窝网络覆盖且需要收集/更新数据的偏远地区锻炼的人。当他们回到办公室时,他们可以将数据同步/上传回服务器。它需要是 HTML5 的原因是它与平台无关,即可以在 iOS、Android 等上运行它,只要它有支持 HTML5 的现代网络浏览器。

现在我已经使用 HTML5 本地存储(用于数据)和 HTML5 离线应用程序缓存(用于页面/css/js/图像)构建了系统,它在小型数据集(我可以查看,离线编辑和保存,在线加载/同步)。现在我需要扩展到 10,000 行数据。它可以工作,但速度很慢,在 Intel 四核 8GB 机器上加载时浏览器会挂起 10 秒。

所以我一直在研究一些比本地存储更好的替代方案:

1) WebSQL:将能够使用 SQL 语言查询数据并进行连接等。问题是它现在已被弃用,将不再受支持,所以我不想花时间为它构建一些东西。

2) IndexedDB:使用对象存储(技术上我已经使用本地存储 API 存储对象并使用 JSON 存储)。可能更快,因为它使用带有 SQL lite 后端的索引。有很多样板代码可以执行简单的任务,例如创建数据库、添加数据库、读取数据库、遍历数据库。我只想做一个像 select(xyc, abc).where(abc = 123).limit(20) 这样的简单查询,但必须编写大量 JavaScript 代码才能完成。如何编写自己的代码来在表之间进行连接,任何地方都有示例吗?

我找到了一个 jQuery plugin这可能会让生活更简单。周围是否有任何其他工具或其他库可以减轻使用 IndexedDB 的痛苦?

非常感谢!

最佳答案

我有一个开源的web database wrapper它同时支持 IndexedDB 和 WebSql。

版本迁移是在后面处理的。以下代码迁移(或初始化)到版本 2。

schema_ver2 = {
version: 2,
size: 2 * 1024 * 1024, // 2 MB
stores: [{
name: 'ydn_obj',
keyPath: 'id.value',
indexes: [{
name: 'age',
type: 'INTEGER' // type is require for WebSql
}]
}]
}
db = new ydn.db.Storage('db name', schema_ver2)

Query非常灵活和强大。例如:

q = db.query('customer').when('age', '>=', 18 , '<', 25).where('sex', '=', 'FEMALE')
young_girls = q.fetch(10, 2); // limit and offset

如果年龄被索引,再次使用更有效的键范围查询:

q = db.query('customer', 'age').bound(18, 25, true).where('sex', '=', 'FEMALE')

它也支持transaction .

p123 = db.tkey('player', 123);
db.runInTransaction(function() {
p123.get().success(function(p123_obj) {
p123_obj.health += 10;
p123.put(p123_obj);
});
}, [p123]);

关于javascript - IndexedDB 的包装函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7629758/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com