9

我的问题是对这个主题的跟进。到目前为止,我喜欢 Firebase 的简单性和性能。

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

因此:

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

由于快照数据作为 Javascript 对象位于内存中,因此将其序列化为 JSON 并将其保存到 localStorage 应该很简单,因此可以在下次启动应用程序时加载确切的应用程序状态,无论是否在线。但是由于 firebase.js 代码被缩小和神秘,我不知道去哪里找。

PouchDB在 CouchDB 后端很好地处理了这个问题。(但它缺乏 Firebase 的快速响应时间和简单性。)

所以我的问题是:

1. 我需要序列化哪些数据才能将快照保存到 localStorage?当应用程序启动时,如何将其加载回 Firebase?

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

(顺便说一句,有两个功能可以帮助 Firebase 击败竞争对手:离线缓存和地图缩减。)

4

1 回答 1

11

离线缓存和类似 map reduce 的功能都在开发中。firebase.js源代码在此处可用于开发和调试。

您可以使用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 上线时,它将被同步。

但是,这确实只适用于只有一个人可以访问和更改的静态数据。例如,考虑一下,如果我下载数据并在本地保存一周,在此期间它被其他几个用户修改,然后我离线加载我的应用程序,进行一个小的更改,然后上线。我过时的更改会吹走其间完成的所有工作。

有很多方法可以解决这个问题——冲突解决、使用安全规则和更新计数器/时间戳来检测过时的数据并防止回归——但这不是一件简单的事情,在你走这条路之前需要深入考虑。

于 2013-11-08T13:57:38.153 回答