在2011年为iOS / Android开发HTML5离线存储解决方案

时间:2011-10-12 01:38:12

标签: javascript html5 web-sql indexeddb jaydata

7 个答案:

答案 0 :(得分:18)

我建议您查看JayData库,它实际上具有为移动设备创建存储无关数据访问层的确切目的。 JayData提供了一个带有JavaScript Language Query (JSLQ)和JavaScript CRUD支持的抽象层,让您使用不同的离线和在线数据存储类型以完全相同的方式工作。 JayData支持在本地或远程处理复杂实体以及实体关系。

在撰写本文时,JayData支持以下商店或协议:webSQL(sqLite)/ IndexedDB / OData / YQL / FBQL。

使用JayData的提供商回退功能可以轻松解决提供不同存储引擎的不同系统的特定问题:它将使用它可以找到的任何存储层,同时仍然为消费者代码提供相同的API。

关于WebSQL在2012年被弃用:在撰写本文时,WebSQL仍然拥有95%的设备覆盖率,包括Samsung SmartTV和amazon Kindle。 Check out kindle executing WebSQL unit tests with JayData

答案 1 :(得分:13)

我会结账CouchBase Lite。它是在Android和iOS上运行的CouchDB近乎全功能的实现。

iOS

Android

如果您将应用程序包装在PhoneGap之类的内容中,则可以为这两个平台创建原生HTML 5应用程序,并且您只需执行一些Android / iOS特定编程即可实现CouchDB。

优点:

  • 快速查看引擎,用于查询多行数据。
  • 简单而强大的复制支持烘焙。

缺点:

  • 键值存储 - 需要一段时间才能习惯。

答案 2 :(得分:6)

我在为自己的项目寻找解决方案时做了一些研究。 看起来这个库很有前途:http://nparashuram.com/IndexedDBShim/

它允许在幕后使用具有WebSQL的IndexedDB API。

它的测试通过最近的iPad,iPhone 5,Android 4.2.2。

希望这有助于某人。

答案 3 :(得分:2)

我会告诉你使用Corona。它是一个私有平台,用于支持SQLite的交叉移动应用程序。

赞成

  • 这很简单,对SQLite有很大的支持,不需要用Html5存储做奇怪的事情

缺点

  • 如果您想在Android电子市场或iOS电子市场中使用它,则必须付费。

我在这里粘贴他们对此的评价:

  

Corona在所有平台上都支持SQLite数据库。这是   基于iPhone上内置的sqlite支持,并进行了编译   Android上的SQLite版本。请注意,这会增加。的大小   Android二进制文件300K。

     

SQLite适用于所有版本的Android,iPhone和iPad   以及在电晕模拟器中......

答案 4 :(得分:2)

“我见过像草坪这样的东西,但我很确定它只允许你默认使用本地存储,然后又回到其他存储器。我想我宁愿使用Web SQL(默认情况下)较慢的选择。“

这是可配置的,存储引擎的每个“适配器”都是自包含的,您可以将适配器传递给Lawnchair构造函数,或者通过连接javascript来更改它回退到其他存储选项的顺序创建库时文件的方式不同。例如对于indexed-db然后回到sqlite然后转换sqlite:

git clone https://github.com/brianleroux/lawnchair.git  
cd lawnchair  
cat src/Lawnchair.js src/adapters/indexed-db.js src/adapters/webkit-sqlite.js src/adapters/gears-sqlite.js > my_lawnchair.js

当然,正如其他答案所示,您可以使用phonegap等将html5打包成本机应用程序然后您将有很多选择,但如果您想坚持使用Web标准,那么这可能是一个好方法直到我们广泛采用IndexedDB。

答案 5 :(得分:1)

为什么不在javascript中编写一个简单的存储引擎(涵盖“基于标准”的部分)?显然你不需要任何非常花哨的东西,所以它不需要花太多精力才能让它运转起来。

我会做以下事情:

  • 以bson或类似的二进制格式存储所有内容。
  • 在文件中解析并创建索引,并在启动时读取。
  • 使用javascript查询并从您的(明显离线)Web应用程序中读取大文件。
  • 分别存储更新的对象。

只有数据库足够简单时,此解决方案才可行。但我认为它可能有用 - 在移动设备上javascript支持很好。

灵感here是javascript中的Btree +实现。

要阅读本地文件,您需要file APIaccess local files可用于Safari 6。大多数现代浏览器都支持它,甚至{{3}}。我无法确定当前的iPhone浏览器是否支持此API。

答案 6 :(得分:1)

值得查看我的开源库https://bitbucket.org/ytkyaw/ydn-db/wiki/Home

  

支持版本迁移,高级查询和事务的Indexeddb,WebDatabase(WebSQL)和WebStorage(localStorage)存储机制的Javascript数据库模块。

作为NoSQL库,join是手动的,但并非不可能。已经有了关键的连接算法内置库。