Pie*_*ier 23 javascript firebase firebase-realtime-database
我在某处读到了Firebase缓存数据的说法.
所以我运行了这个测试,读取了大量的数据(大约400KB).
这是相关的代码.
firebase.initializeApp(config);
var counter = 0;
console.time('firebase answered in');
firebase.database().ref('texts').once('value',onData);
function onData(snapshot){
console.timeEnd('firebase answered in');
counter ++;
if(counter > 20) return;
setTimeout(function(){
console.time('firebase answered in');
firebase.database().ref('texts').once('value',onData);
},2000);
}
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,第一次加载数据需要一段时间,后续调用花费的时间要少得多.
firebase的回答:1279.422ms
firebase的回答:236.378ms
firebase的回答:228.595ms
firebase回答:202.700ms
firebase的回答:208.371ms
firebase回答:214.807ms
等等
但是,如果数据在本地缓存~200ms(有时更多)似乎需要大量时间来访问本地数据.足以让用户在渲染UI时感知延迟.
Firebase缓存数据也是如此吗?那些发生了~200ms什么?
Fra*_*len 36
只要存在该数据的活动侦听器,Firebase就会缓存数据(在内存中).
由于您的代码仅使用once()侦听器,因此在接收数据时(在调用回调之前)立即分离侦听器,并从缓存中清除数据.这意味着必须从服务器获取每个数据once(),这显然是你的情况下的200ms往返.第一个加载速度较慢,因为可能在该调用中建立了连接.
验证这一点的快速技巧是在开始循环之前添加永久监听器:
firebase.initializeApp(config);
var counter = 0;
console.time('firebase answered in');
firebase.database().ref('texts').on('value',function() {});
firebase.database().ref('texts').once('value',onData);
function onData(snapshot){
console.timeEnd('firebase answered in');
counter ++;
if(counter > 20) return;
setTimeout(function(){
console.time('firebase answered in');
firebase.database().ref('texts').once('value',onData);
},2000);
}
Run Code Online (Sandbox Code Playgroud)
通过这种简单的更改,日志记录变为:
firebase回答:580.575ms
firebase回答:4.040ms
firebase回答:7.569ms
firebase回答:5.739ms
| 归档时间: |
|
| 查看次数: |
15615 次 |
| 最近记录: |