Firebase离线缓存&原始的firebase.js源代码

时间:2013-11-08 06:09:50

标签: javascript firebase offline-caching

我的问题是this topic的后续行动。我喜欢Firebase的简洁性和性能,这是我迄今为止看到的。

据我所知,firebase.js将来自服务器的数据快照同步到Javascript内存中的对象。但是,目前没有将此数据缓存到磁盘的功能。

结果:

  1. 应用程序在启动时需要连接,因此没有真正的脱机访问。
  2. 每次应用启动时都会通过重新传输所有以前的数据来浪费带宽。
  3. 由于快照数据作为Javascript对象驻留在内存中,因此将其序列化为JSON并将其保存到localStorage应该是非常简单的,因此可以在下次启动应用程序时在线或不加载确切的应用程序状态。但是当firebase.js代码缩小并且含糊不清时,我不知道在哪里看。

    PouchDB在CouchDB后端处理得非常好。 (但它缺乏Firebase的快速响应时间和简单性。)

    所以我的问题是:

    1。我需要将哪些数据序列化以将快照保存到localStorage?如何在应用启动时将其加载回Firebase?

    2。我在哪里可以下载firebase.js的原始非缩小开发源代码?

    (顺便提一下,有两个功能可以帮助Firebase将竞争对手排除在外:离线缓存和地图减少。)

1 个答案:

答案 0 :(得分:11)

脱机缓存和映射类似reduce的功能都在开发中。用于开发和调试的firebase.js source is available here

您可以使用exportVal在本地序列化快照,以保留所有优先级数据。如果您没有使用优先级,则可以使用简单的值:

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/connected来帮助确定此问题),则在您的应用加载后,您可以致电.set()将该数据放回本地Firebase。当/如果Firebase联机,它将被同步。

但是,这确实只适用于只有一个人可以访问和更改的静态数据。例如,如果我下载数据,将其保存在本地一周,并在此期间被其他几个用户修改,然后我将我的应用程序脱机,进行一次小的更改,然后上线,请考虑一下。我陈旧的变化会吹走他们之间所做的所有工作。

有很多方法可以解决这个问题 - 冲突解决,使用安全规则和更新计数器/时间戳来检测陈旧数据并防止回归 - 但这不是一件简单的事情,需要深入考虑才能降低这条路线。