我的数据按日期和增量 ID 排序,如下所示:
- 20140622
- 值_1
- 值_2
- 20140623
- 值_3
- 值_4
为了检测何时添加新日期,我设置了一个 on('child_added') 监听器,然后设置了另一个 on('child_added') 监听器来检测该日期内的新值,因为 on('child_added') 是仅针对直系子级触发。
为了避免双带宽使用并加快加载速度,我想知道该快照的所有数据在哪一刻发生传输:当我定义新子项时或当我使用 .val( )函数?
最佳答案
当您使用 on() 或 Once() 建立监听器时,就会下载数据,并保留在本地缓存并同步,直到所有监听器断开连接。
通常不需要为嵌套子项建立 child_added
监听器,因为它们已经存在于作为父项下载的数据中:
var ref = new Firebase(URL);
ref.on('child_added', function(snap) {
console.log('parent rec', snap.name());
snap.forEach(function(childSnap) {
console.log('child rec', childSnap.name());
});
});
但是,嵌套 child_added
事件也没有什么坏处;这全部由 Firebase 内部优化,这些值将立即从本地缓存的数据中返回:
var ref = new Firebase(URL);
ref.on('child_added', function(snap) {
console.log('parent rec', snap.name());
snap.ref().on('child_added', function(snap) {
console.log('child rec', snap.nam());
});
});
这里唯一需要注意的是,如果您想稍后在这些事件监听器上调用 off(),则必须在服务器连接被切断并清除所有缓存数据之前将它们全部断开。
关于javascript - Firebase 何时加载数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24361890/