Question

Ma question est un suivi de ce sujet. J'adore la simplicité et les performances de Firebase de ce que j'ai vu jusqu'à présent.

Si je comprends bien, Firebase.js synchronise les instantanés de données du serveur dans un objet dans la mémoire JavaScript. Cependant, il n'y a actuellement aucune fonctionnalité pour mettre en cache ces données sur le disque.

Par conséquent:

  1. Les applications sont nécessaires pour avoir une connexion lors de leur démarrage, il n'y a donc pas d'accès hors ligne.
  2. La bande passante est gaspillée chaque fois qu'une application démarre en retransmettant toutes les données précédentes.

Étant donné que les données d'instantané sont en mémoire en tant que objet JavaScript, il devrait être assez trivial pour le sérialiser en tant que JSON et l'enregistrer sur LocalStorage, de sorte que l'état d'application exact peut être chargé la prochaine fois que l'application sera démarrée, en ligne ou non. Mais comme le code Firebase.js est minifié et cryptique, je ne sais pas où chercher.

Pouchdb gère très bien cela sur un backend Couchdb. (Mais il n'a pas le temps de réponse rapide et la simplicité de la base de feu.)

Donc mes questions sont:

1. Quelles données aurais-je besoin pour sérialiser pour enregistrer un instantané à LocalStorage? Comment puis-je ensuite recharger cela dans Firebase lorsque l'application commence?

2. Où puis-je télécharger le code source de développeur non minimifié d'origine pour firebase.js?

(Soit dit en passant, deux caractéristiques qui aideraient Firebase à souffler la compétition hors de l'eau: la mise en cache hors ligne et la carte de la carte.)

Était-ce utile?

La solution

La mise en cache hors ligne et les fonctionnalités de type réduction de la carte sont toutes deux en développement. The Firebase.js La source est disponible ici pour le développement et le débogage.

Vous pouvez sérialiser un instantané localement en utilisant exportval pour préserver toutes les données de priorité. Si vous n'utilisez pas les priorités, une valeur simple fera l'affaire:

var fb = new Firebase(URL);
fb.once('value', function(snapshot) {
   console.log('values with priorities', snapshot.exportVal());

   console.log('values without priorities', snapshot.val());
});

Plus tard, si Firebase est hors ligne (utilisez .info / connecté Pour aider à déterminer cela) lorsque votre application est chargée, vous pouvez appeler .Positionner() pour remettre ces données dans la base de feu locale. Lorsque / si Firebase est mis en ligne, il sera synchronisé.

Cependant, cela ne convient vraiment qu'aux données statiques auxquelles une seule personne accédera et changera. Considérez, par exemple, les retombées si je télécharge les données, gardez-la localement pendant une semaine, et elle est modifiée par plusieurs autres utilisateurs pendant cette période, puis je charge mon application hors ligne, apporte une modification mineure, puis je viens en ligne. Mes changements marqués souffleraient tout le travail effectué entre les deux.

Il existe de nombreuses façons de faire face à cela - conflit la résolution, en utilisant des règles de sécurité et en mettant à jour les compteurs / horodatages pour détecter les données périmées et empêcher les régressions - mais ce n'est pas une affaire simple et nécessite une profonde considération avant de descendre cette voie.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top