我的问题是对 这个话题. 。从到目前为止,我喜欢Firebase的简单性和性能。

据我了解,firebase.js将服务器从服务器同步到JavaScript内存中的对象。但是,目前尚无将这些数据缓存到磁盘的功能。

因此:

  1. 应用程序在启动时必须建立连接,因此没有真正的离线访问。
  2. 每当应用程序重新传输所有以前的数据时,每当应用程序启动时,带宽就会浪费。

由于快照数据作为JavaScript对象坐在内存中,因此将其序列化并将其保存到LocalStorage中应该是非常微不足道的,因此可以在下次在线启动应用程序,无论是否在线上都可以加载确切的应用程序状态。但是,随着firebase.js代码的缩小和隐秘,我不知道在哪里看。

pouchdb 在CouchDB后端很好地处理了这一点。 (但它缺乏燃料的快速响应时间和简单性。)

所以我的问题是:

1.我需要序列化哪些数据以将快照保存到LocalStorage?然后,当应用程序启动时,如何将其加载到火箱中?

2.在哪里可以下载firebase.js的原始非汇总开发源代码?

(顺便说一句,有两个可以帮助Firebase将竞争吹出水的功能:离线缓存和地图减少。)

有帮助吗?

解决方案

离线缓存和地图降低样功能都在开发中。 firebase.js 来源可在此处使用 用于开发和调试。

您可以使用本地序列化快照 出口 保留所有优先数据。如果您不使用优先级,那么简单的价值将会做:

var fb = new Firebase(URL);
fb.once('value', function(snapshot) {
   console.log('values with priorities', snapshot.exportVal());

   console.log('values without priorities', snapshot.val());
});

稍后,如果firebase脱机(使用 .info/连接 为了帮助确定这一点)当您的应用程序加载时,您可以致电 。放() 将这些数据放回本地燃料基础上。何时/如果Firebase上网,则将同步。

但是,这确实仅适用于只有一个人访问和更改的静态数据。例如,考虑一下,如果我下载数据,请在本地保留一周的后果,并在此期间由其他几个用户修改,然后我离线加载应用程序,进行一个较小的更改,然后在线上。我的陈旧变化将炸毁两者之间所做的所有工作。

有很多方法可以处理此 - 冲突解决方案,使用安全规则并更新计数器/时间戳来检测陈旧数据并防止回归 - 但这并不是一个简单的事情,在您沿着这条路线前进之前需要深入考虑。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top