没有'on'订阅
Cache without 'on' subscription
是否有可能告诉firebase缓存路径而没有'on'订阅?
目前我正在做的事情是低效的,浪费空间和丑陋的:
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()))
})
简短的回答是no—目前没有办法告诉Firebase在不附加事件侦听器的情况下在路径中缓存数据。
也就是说,想想你要解决的问题是什么。如果你想同步访问存储在Firebase中的数据,那么你上面提到的方法是目前最好的方法。
但是,如果您只是想避免检索数据的网络往返,那么在希望维护缓存的地方附加单个Firebase事件侦听器可能会解决问题。在这种情况下,您将在附加侦听器时传递一个无操作块,并在整个代码中使用ref.once('value', ...)
。通过将初始侦听器附加到no-op块,对ref.once(...)
的所有后续调用都将使用本地缓存,而不需要访问网络。
相关文章:
- 使用 jQuery 的 .on 函数如何获取事件的原始元素
- I'我设计了一个下拉菜单,onclick会出现,而on blur会消失
- window.on.scroll事件未启动
- Socket.io on Mozilla Rhino
- CSS中的游标属性似乎不适用于USB On The Go
- jQuery点击ON现在使用.load触发关闭
- JQuery.on(“keydown”)追加到页面时不工作
- 使用.on动态添加jquery/js不知道的html元素
- angularjs$valid-on-dates在firefox中报告错误
- addEventListener on NodeList
- 当我在节点上拖动鼠标时,我如何防止使用d3.ehavior.zoom().on(“缩放”,重绘)
- jQuery 1.7.2:.on()在一个页面上工作;Don’别再干别的了
- Jquery on单击“显示信息”
- 如何知道使用socket.io订阅/取消订阅频道
- 平均值.on(事件[,选择器][,数据],处理程序)
- 多个jQuery.on()事件无法运行xBrowser(取决于顺序)
- 如何使jQuery的“bind”或“on”事件处理程序幂等
- 基于订阅的nosql内存数据库
- 无法使以下ng on click outside指令在同一页面上的两个元素上工作
- 没有'on'订阅