zua*_*auz 9 javascript jquery local-storage web-storage indexeddb
我需要为iPad /平板电脑设备构建一个离线HTML5网络应用程序,用户可以从服务器下载数据集(数据表)并将其存储在设备上.然后,用户可以断开与服务器的连接,并在设备上本地查看/编辑数据.这适用于在没有蜂窝覆盖且需要收集/更新数据的偏远地区工作的人.当他们回到办公室时,他们可以将数据同步/上传回服务器.它需要成为HTML5的原因是它与平台无关,即只要它具有支持HTML5的现代Web浏览器,就可以在iOS,Android等上运行它.
现在我已经使用HTML5本地存储(用于数据)和HTML5离线应用程序缓存(用于pages/css/js/images)构建了系统,并且它可以很好地处理小数据集(我可以查看,编辑和保存)在线时离线和加载/同步).现在我需要扩展到10,000行数据.它工作正常,但它很慢,并在加载到英特尔四核8GB机器上时将浏览器挂起10秒.
所以我一直在研究一些比本地存储更好的选择:
1)WebSQL:能够使用SQL语言查询数据并进行连接等问题是它现在已被弃用,不再支持了,所以我不想花时间为它构建一些东西.
2)IndexedDB:使用对象存储(从技术上讲,我已经使用本地存储API存储对象并使用JSON存储).由于它使用带有SQL lite后端的索引,因此可能更快.有许多样板代码可用于执行简单的任务,例如创建数据库,添加数据库,读取数据库,迭代数据库.我只是想做一个简单的查询,select(xyc, abc).where(abc = 123).limit(20)
但是必须编写很多JavaScript代码来完成它.如何编写自己的代码来在表之间进行连接,任何地方的任何示例?
我发现了一个可能让生活更简单的jQuery插件.是否有其他库或其他库可以减轻使用IndexedDB的痛苦?
非常感谢!
您考虑过[草坪椅][1]吗?它提供了对底层存储的良好抽象,还有用于查询、聚合和分页数据的插件。以查询为例:
// basic searching
this.where('record.name === "brian"', 'console.log(records)')
this.where('record.name != ?', username, 'console.log(records)')
// sorting results
this.where('name === "brian"').asc('active', 'console.log(records)')
Run Code Online (Sandbox Code Playgroud)
我能看到的唯一潜在缺点是它似乎无法处理迁移,而且通用性似乎没有创建索引等的方法。
关于连接,IndexedDB 被设计为面向文档(无 SQL)的存储,而不是关系数据库,但是考虑到这是一种常见的情况,似乎有两种选择:
1) 游标迭代数据项 2) 如果上述方法太慢,您还可以创建一个专用的键值对象存储,然后使用它在相关存储中进行索引查找。根据您的加入要求的数量,这可能是一件苦差事。
归档时间: |
|
查看次数: |
2947 次 |
最近记录: |