Firebase是否允许应用以离线模式启动?

eug*_*eug 29 offline offline-caching offlineapps firebase

我正在考虑使用firebase来编写使用PhoneGap和HTML5应用程序缓存的移动应用程序.

让我们假设每个用户都有一个TODO项目列表.如果在手机离线时启动应用程序,它是否能够从上一个会话加载数据并在建立连接时同步?如果是这样,我想知道这是如何实现的,因为我在firebase.js中找不到对localStorage的引用.

And*_*Lee 21

简短的回答是:还没有.

一旦应用程序连接到Firebase,客户端将在本地缓存数据,并且即使在网络连接丢失后也能够访问存在未完成的"on"回调的数据.但是,此数据不会持久保存到磁盘,"离线模式"仅在应用程序仍在运行时才起作用.

未来将提供全面的离线支持.

编辑2016:现在可以为原生iOS和Android应用提供完全离线支持:https://www.firebase.com/blog/2015-05-29-announcing-mobile-offline-support.html

  • 我今天遇到了Firebase这个缺失的功能.拥有完整的应用程序缓存支持会很棒. (2认同)
  • 对电子邮件的回复:<quote>页面刷新之间不保留数据.它不存储在localStorage中,它只存储在应用程序的内存中.没有互联网就无法检索它,但是,如果您打开一个页面,丢失互联网然后对数据进行一些更改,它将在重新连接时同步.我们正在寻找即将推出的localStorage集成,但现在还没有.</ quote> (2认同)

Ton*_*gan 9

解决JS应用程序此问题的Firebase的替代方案是CouchDb(服务器)<=> PouchDb(JS客户端).如果你已经实现了一个漂亮干净的客户端服务层,那么移植到PouchDb应该是相当直接的,因为它们都是NoSQL/JSON数据库.CouchDb还支持索引的map/reduce视图.

PouchDb是一个Javascript API,可实现完全脱机的 CouchDb客户端.它可以自动检测并使用本地存储,IndexDbWebSQL在线或离线时永久保留本地数据.PouchDb API可用于访问本地或远程数据库(只需更改URL),并在两者之间连接完整同步或过滤同步.有许多有用的PouchDb插件,代码示例和一个小的包装器库来支持AngularJS的Q promises API.

使用PouchDb,您可以在离线时安全地启动应用程序,然后几天后重新启动应用程序并将所有CUD数据更改同步到服务器.这可能导致更新冲突,因此CouchDb支持用于检测和跟踪此操作的记录版本控制.因此,您可能需要服务器端逻辑来解决这些冲突.对于具有离线同步和CouchDb关键功能的分布式系统,这是不可避免的.我不确定Firebase是否支持此MVCC功能.

PouchDb基本上是Apache CouchDb的重新实现,包括它的同步协议.CouchDb和PouchDb都经过了良好的测试,免费和开源.开源意味着CouchDb服务器也可以部署为Intranet服务 - 可选择同步到外部云服务.有许多CouchDb托管服务提供商.

IBM的Cloudant托管团队最近将他们的BigCouch集群功能添加到Apache CouchDb 2.0项目中,现在您可以从Micro Db(PouchDb)=>单服务器=>多主服务器(复制)=>大沙发集群/地理集群扩展.与MongoDb不同,CouchDb安全地支持单服务器部署.

注意:PouchDb也可以使用相同的协议同步到CouchBase但Couchbase!== CouchDb.这是一种商业产品.

另一个很酷的技巧是PouchDb可以在NodeJS服务器内运行,作为CouchDb的替代品.我认为它还没有准备好用于生产,但对于单元测试非常方便.请参阅express-pouchdb.

链接:

CouchDb Hosters:

DIY

Docker + CouchDb:

安全模型

迁移到CouchDb时需要考虑的一个问题是它具有更有限的访问控制模型.这部分是由于它的复制算法.这篇博文详细介绍了这一点(比真正的权威指南更好).

适配器

实际上,您可能希望将WebSQL用于PouchDB存储,因为它的性能要好得多.- 这是存储适配器完整详细信息

PouchDb Extras

有一系列令人咋舌的新酷"圣诞树"好东西总是从多产的PouchDb社区中脱颖而出.

PouchDb的最佳功能之一是所有开源插件(37)和UI框架适配器(12).