gpt4 book ai didi

javascript - Firebase 是否缓存数据?

转载 作者:行者123 更新时间:2023-12-03 02:24:36 26 4
gpt4 key购买 nike

我在某处读到一项声明,称 Firebase 会缓存数据。

所以我跑了this test读取半大量数据(约 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);
}

正如您所看到的,第一次加载数据需要一段时间,后续调用需要的时间要少得多。

firebase answered in: 1279.422ms

firebase answered in: 236.378ms

firebase answered in: 228.595ms

firebase answered in: 202.700ms

firebase answered in: 208.371ms

firebase answered in: 214.807ms

etc

但是,如果数据缓存在本地~200ms(有时更多),访问本地数据似乎需要很多时间。足以让用户在渲染 UI 时感受到延迟。

那么 Firebase 会缓存数据吗?在这 ~200ms 内发生了什么?

最佳答案

只要该数据存在事件监听器,Firebase 就会缓存该数据(在内存中)。

由于您的代码仅使用 once() 监听器,因此当接收到数据时(在调用回调之前)监听器会立即分离,并且数据会从缓存中清除。这意味着必须为每个 once() 从服务器获取数据,在您的情况下,这显然是 200 毫秒的往返时间。第一次加载速度较慢,因为连接可能是在该调用中建立的。

验证这一点的一个快速技巧是在开始循环之前添加一个永久监听器:

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);
}

通过这个简单的更改,日志记录变成:

firebase answered in: 580.575ms

firebase answered in: 4.040ms

firebase answered in: 7.569ms

firebase answered in: 5.739ms

关于javascript - Firebase 是否缓存数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38423277/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com