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

标签 javascript firebase offline-caching

我的问题是 this topic 的后续问题.到目前为止,我喜欢 Firebase 的简单性和性能。

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

结果:

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

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

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

所以我的问题是:

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

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

(顺便说一句,有两个功能可以帮助 Firebase 在竞争中脱颖而出:离线缓存和 map reduce。)

最佳答案

离线缓存和类似 map 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 上线,它将被同步。

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

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

关于javascript - Firebase 离线缓存 & 原始 firebase.js 源代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19852669/

相关文章:

javascript - 菜单栏下拉上下文

javascript - ES6模块导入给出 "Uncaught SyntaxError: Unexpected identifier"

javascript - Ajax 脚本加载/仅显示一次

firebase - 使用 firebase 时 Google 应用程序脚本中的服务器错误

android - Android 中的持久/离线图像缓存

flash - 没有互联网运行的网站?

windows-authentication - Windows/NTLM 身份验证的应用程序缓存 list 文件错误

java - 将 HTML 内容保存在本地存储中

firebase - 如果 url 包含 '#',如何使用 google firebase 动态链接缩短 url

java - 从数据库中特定userid子节点读取值