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

时间:2014-05-17 19:15:38

标签: javascript angularjs sqlite cordova persistence

我希望在PhoneGap应用上找到Angularjs数据持久性的最佳实践。我正在使用Ionic Framework,但与此问题无关,因为它只是建立在Angular& amp;科尔多瓦。

我喜欢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移动应用程序上处理大数据持久性。

由于

3 个答案:

答案 0 :(得分:18)

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

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

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

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

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

    祝你选择好运!

答案 1 :(得分:6)

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

答案 2 :(得分:1)

  

Indexeddb - 有一个垫片可以为大多数主流浏览器构建compat层。 5M限制。如果我可以在Sqlite之上使用它,那么自从更多基于标准以来,这对我来说可能是一个胜利者。

实际上,WebSQL(你真正在引擎盖下实际使用的垫片下面的层)的限制是* 50 * M.但是,您可以使用权限请求来获取更多存储空间。此外,正如您所指出的那样,这是我建议的:标准。传言是Safari 7.1将支持IndexedDB。