web-dev-qa-db-ja.com

Firebaseで増分データから初期データロードを分離する方法は?

5秒ごとに新しい子供がFirebaseに追加されるアプリケーションがあります。私には何千人もの子供がいます。

アプリケーションのロード時に、最初の数千個を、5秒ごとにトリクルする後続の子とは異なる方法で処理したいと思います。

値を使用し、すべてを処理してからchildren_addedを使用することをお勧めします。しかし、処理に時間がかかりすぎると、ポイントを見逃す可能性があると思います。

Firebaseでこれを行う方法はありますか?

35
Keith Carter

child_addedイベントは、プリロードされた初期データが、親でvalueイベントが発生する前に発生しますvalueイベントを一種の「初期データロード」通知として使用できます。 別の同様のStackOverflowの質問 から少し変更したコードを次に示します。

var initialDataLoaded = false;
var ref = new Firebase('https://<your-Firebase>.firebaseio.com');

ref.on('child_added', function(snapshot) {
  if (initialDataLoaded) {
    var msg = snapshot.val().msg;
    // do something here
  } else {
    // we are ignoring this child since it is pre-existing data
  }
});

ref.once('value', function(snapshot) {
  initialDataLoaded = true;
});

ありがたいことに、Firebaseはこのデータをスマートにキャッシュします。つまり、child_addedおよびvalueリスナーは、データを1回だけダウンロードします。既にネットワークを通過しているデータに新しいFirebaseリスナーを追加するのは非常に安価であり、そのようなことを定期的に実行することに安心する必要があります。

あなたが実際にそれを必要としないときにすべての初期データをダウンロードすることを心配しているなら、タイムスタンプ付きクエリを使用するためにコメントの@FrankvanPuffelenの提案に従います。これは非常にうまく機能し、Firebaseクエリを使用して最適化されます。

63
jwngr