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

Kev*_*ker 42 javascript sqlite persistence angularjs cordova

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

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

这是一个概述:

要求

  • 将本地数据库添加到app build以获取预加载的数据.这将超过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 - 有一个垫片可以为大多数主流浏览器构建compat层.5M限制.如果我可以在Sqlite之上使用它,那么自从更多基于标准以来,这对我来说可能是一个胜利者.
  • 存储在json文件中 - 只需使用普通旧对象,然后使用Phonegap文件api加载和存储序列化数据.似乎每次我们想要保存时都必须序列化所有数据是一种痛苦......但只要我可以使用Angular过滤器就可以选择.

对不起,很长的帖子.我真的希望看到一些关于最佳实践的想法.喜欢Angular Way来处理Hybrid移动应用程序上的大数据持久性.

谢谢

nla*_*son 18

PouchDB dev在这里.显然我有偏见,但这是我的看法:

  1. 在PhoneGap/Cordova中绕过存储配额的最佳方法是使用适用于iOS/Android 的SQLite插件.性能也往往更好,特别是在Android上.(编辑:在现代后Kitkat Android中,它实际上更糟糕.)

  2. WebSQL有一个很好的查询语言,但你想要面向未来,即不要将自己链接到死标准.还有Windows Phone和Firefox OS需要考虑.

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

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

无论你选择什么,祝你好运!


Oli*_*ier 6

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

  • 请注意这一点,因为iOS上的websql数据库存储在临时数据位置,并且可以随时由操作系统清除.切换到使用本机数据库+ https://github.com/thgreasi/localForage-cordovaSQLiteDriver,这应该更安全. (2认同)

Jef*_*ard 1

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

实际上,WebSQL(您将在后台实际使用的填充程序下面的层)的限制是*50*M。但是,您可以使用权限请求来获取更多存储空间。此外,这正是我所推荐的,原因正是您提到的:标准。有传言称 Safari 7.1 将附带 IndexedDB 支持。