是否可以告诉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()))
})
答案 0 :(得分:2)
简短的回答是否 - 目前没有办法告诉Firebase在路径上缓存数据而不附加事件监听器。
那就是说,考虑一下你要解决的问题。如果您希望同步访问存储在Firebase中的数据,那么您上面提到的方法是目前最好的方法。
但是,如果您只是想避免网络往返检索数据,那么将一个Firebase事件监听器附加到您希望维护缓存的位置可能会解决您的问题。在这种情况下,您在附加侦听器时会传递一个no-op块,并在整个代码中使用ref.once('value', ...)
。通过使用no-op块附加初始侦听器,对ref.once(...)
的所有子序列调用都将使用本地缓存,而不需要访问网络。