web-dev-qa-db-fra.com

Comment séparer la charge de données initiale des enfants incrémentiels avec Firebase?

J'ai une application où de nouveaux enfants sont ajoutés à Firebase toutes les 5 secondes environ. J'ai des milliers d'enfants.

Lors du chargement de l'application, j'aimerais traiter les milliers initiaux différemment des enfants suivants qui ruissellent toutes les 5 secondes.

Vous pourriez suggérer que j'utilise la valeur, que je traite tout, puis que j'utilise children_added. Mais je crois que si le traitement prend trop de temps, j'ai le potentiel de manquer un point.

Existe-t-il un moyen de le faire dans Firebase qui garantit que je ne manque aucun point?

35
Keith Carter

Puisque child_added les événements pour les données initiales préchargées se déclencheront avant l'événement value se déclenche sur le parent, vous pouvez utiliser le value événement comme une sorte de notification "données initiales chargées". Voici un code que j'ai légèrement modifié de ne autre question StackOverflow similaire .

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

Heureusement, Firebase mettra en cache intelligemment ces données, ce qui signifie que la création d'un child_added et un écouteur value ne téléchargeront les données qu'une seule fois. Ajouter de nouveaux écouteurs Firebase pour des données qui ont déjà traversé le fil est extrêmement bon marché et vous devriez vous sentir à l'aise de faire des choses comme ça régulièrement.

Si vous êtes inquiet de télécharger toutes ces données initiales alors que vous n'en avez pas réellement besoin, je suivrais les suggestions de @ FrankvanPuffelen dans les commentaires pour utiliser une requête horodatée. Cela fonctionne très bien et est optimisé à l'aide de requêtes Firebase.

63
jwngr