PhoneGap 上 Angularjs/Javascript 应用程序的最佳数据持久性? [关闭]

Posted

技术标签:

【中文标题】PhoneGap 上 Angularjs/Javascript 应用程序的最佳数据持久性? [关闭]【英文标题】:Best data persistence for Angularjs/Javascript Apps on PhoneGap? [closed] 【发布时间】:2014-07-06 01:56:15 【问题描述】:

我希望在 PhoneGap 应用程序上找到 Angularjs 数据持久性的最佳实践。我在此基础上使用 Ionic Framework,但与此问题无关,因为它只是构建在 Angular 和 Cordova 之上。

我喜欢 Angular 在数据持久性解决方案上保持灵活性,这是有道理的,因为它是一个 Web 框架,而不是专门的混合应用程序框架……很想知道人们是如何解决这个问题的。

这是一个概述:

要求

为预加载数据添加本地数据库到应用程序构建。这将超过 5MB 的数据限制。 启动时从本地数据库加载数据。 将更新后的数据保存到本地数据存储中以保持持久性。 如果可能,首选无模式。 简单的查询界面。如果性能不错,我可以将所有数据加载到内存中并为此使用标准 Angular 过滤器。 对象查询接口...类似于 ActiveRecord 的 ORM,而不必在我的应用程序中编写 SQL。 面向未来。我不想每次构建需要数据持久性的应用程序时都重新发明***。如果可能的话,我还想选择更标准的东西,这样我以后就可以继续使用它……像 Indexeddb 这样的东西在这里很有意义。

选项

我一直在研究以下选项。您能就其中任何一个提供任何反馈吗?

Breezejs - 看起来更专注于服务器。有 SQLite 接口吗? YDN-DB - 似乎是一个选项,但与其他一些选项相比似乎有点晦涩。 JayData - 这仍然有效吗?担心它的商业方面。 Persistencejs - 这看起来很有希望。该项目是否仍然有效? ngStorage - 这只是一个 localStorage 接口吗?是否解决了 5M 的限制? Angular-cache - 我可以用这个预加载数据吗?我可以将数据保留多长时间? localForage - 对此了解不多。是否解决了 5M 的限制? Pouchdb - 关注查询语言。不解决5M限制 Couchdb Lite - 关注查询语言。 WebSQL - 我不使用它,因为它似乎即将退出......加上 5M 限制。 Indexeddb - 有一个 shim 可为大多数主流浏览器构建兼容层。 5M 限制。如果我可以在 Sqlite 之上使用它,那可能是我的赢家,因为基于更多标准。 存储在 json 文件中 - 只需使用普通的旧对象,然后使用 Phonegap 文件 api 加载和存储序列化数据。每次我们想要保存时都必须序列化所有数据似乎很痛苦......但只要我可以使用 Angular 过滤器,这是一个选项。

抱歉,帖子太长了。我真的很想看到一些关于最佳实践的想法。希望有一种 Angular 方式来处理混合移动应用程序上的大数据持久性。

谢谢

【问题讨论】:

【参考方案1】:

PouchDB 开发人员在这里。显然我有偏见,但这是我的看法:

    在 PhoneGap/Cordova 中绕过存储配额的最佳方法是在 ios/android 上使用 SQLite plugin。 性能也趋于更好,尤其是在 Android 上。编辑:在现代后 Kitkat Android 中,它实际上更差。)

    WebSQL 有一种很好的查询语言,但您希望能够适应未来,即不要将自己束缚在一个死的标准上。还需要考虑 Windows Phone 和 Firefox OS。

    因此,如果您使用 PouchDB 并安装 PhoneGap 插件,它将跨浏览器工作,您将避免 iOS/Android 上的存储限制。赢了吗?

另外,我个人的经验是 Angular 像 PB&J 一样适合 PouchDB,因为 Angular 处理直接的 JSON 对象,Pouch 也是如此。 (将此与 Ember 和 Backbone 进行比较,它们具有自定义类,您必须从 JSON 导出/导入 - 这有点棘手。)

祝你好运!

【讨论】:

如果我理解正确,pouchDb 没有大小限制?我可以存储 1GB 吗? 不完全是pouchdb.com/faq.html#data_limits 根据 nlawson 的链接为@JohnAndrews 提供答案:“在 PhoneGap/Cordova 中,您可以使用 SQLite 插件在 iOS 和 Android 上拥有无限数据。” @nlawson 也可以在浏览器中使用?【参考方案2】:

您可以在 Angular 中使用 localForage 和我的实现:https://github.com/ocombe/angular-localForage 在移动设备上,它将使用 indexedDB 或 webSQL,初始限制为 50mb。 该语法将非常容易在您的 Angular 项目中使用。

【讨论】:

请注意这一点,因为 iOS 上的 websql 数据库存储在临时数据位置,并且可以随时被操作系统清除。切换到使用本机数据库 + github.com/thgreasi/localForage-cordovaSQLiteDriver 应该更安全。【参考方案3】:

Indexeddb - 有一个 shim 可为大多数主流浏览器构建兼容层。 5M 限制。如果我可以在 Sqlite 之上使用它,那可能是我的赢家,因为基于更多标准。

实际上,WebSQL(您将在后台实际使用的 shim 下方的层)的限制是 *50*M。但是,您可以使用权限请求来获取更多存储空间。此外,由于您指出的原因,这正是我推荐的:标准。有传言称 Safari 7.1 将支持 IndexedDB。

【讨论】:

谢谢 Jeff,您在类似的构建环境中使用过 indexeddb 吗?所以如果我使用indexeddb,你是说当db超过大小时它会提示用户访问50M?我们将发送不超过 3MB 的种子数据,但在第一次同步到我们的 REST 服务后,它会下载更多。 在路上,但我可能会考虑赞助一个项目,该项目将在 indexeddb API 与 Sqlite Cordova 插件之间建立一个接口。这将是标准并满足我的所有要求。

以上是关于PhoneGap 上 Angularjs/Javascript 应用程序的最佳数据持久性? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

Phonegap 插件可以在 CLI 上运行吗?

PhoneGap:检测是不是在桌面浏览器上运行

PhoneGap - 视口上的目标密度 dpi

在设备上调试 PhoneGap

android上phonegap项目中的Ajax请求

PhoneGap 上 Facebook 登录的哈希键 构建和 PhoneGap 混合应用程序的 OAuth URL Facebook 登录