Ответ 1
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 ответил: 580.575мс
firebase ответил: 4.040ms
firebase ответил: 7.569мс
firebase ответил: 5.739мс