没有“开启”订阅的缓存

时间:2015-05-21 18:17:29

标签: javascript firebase

是否可以告诉firebase在没有“开启”订阅的情况下缓存路径?

目前,我正在做以下工作,既低效,又浪费空间和丑陋:

const ref = new Firebase(someUrl)

app.get('slow/:id', (req, res) => {
  ref.child(id).on('value', snapshot => res.send(snapshot.val()))
})

const cache = {}

ref.on('child_added', snapshot => cache[snapshot.key()] = snapshot.val())
ref.on('child_changed', snapshot => cache[snapshot.key()] = snapshot.val())
ref.on('child_removed', snapshot => delete cache[snapshot.key()])

app.get('fast_wasteful_ugly/:id', (req, res) => {
  const val = cache[req.params.id]

  if (val !== undefined)
    res.send(val)
  else
    ref.child(req.params.id).once('value', snapshot => res.send(snapshot.val()))
})

1 个答案:

答案 0 :(得分:2)

简短的回答是 - 目前没有办法告诉Firebase在路径上缓存数据而不附加事件监听器。

那就是说,考虑一下你要解决的问题。如果您希望同步访问存储在Firebase中的数据,那么您上面提到的方法是目前最好的方法。

但是,如果您只是想避免网络往返检索数据,那么将一个Firebase事件监听器附加到您希望维护缓存的位置可能会解决您的问题。在这种情况下,您在附加侦听器时会传递一个no-op块,并在整个代码中使用ref.once('value', ...)。通过使用no-op块附加初始侦听器,对ref.once(...)的所有子序列调用都将使用本地缓存,而不需要访问网络。