Pregunta

Mi pregunta es un seguimiento de este tema. Me encanta la simplicidad y el rendimiento de Firebase de lo que he visto hasta ahora.

Según tengo entendido, Firebase.js sincroniza las instantáneas de datos del servidor en un objeto en la memoria de JavaScript. Sin embargo, actualmente no hay funcionalidad para almacenar en caché estos datos al disco.

Como resultado:

  1. Se requiere que las aplicaciones tengan una conexión cuando se inician, por lo tanto, no hay un verdadero acceso fuera de línea.
  2. El ancho de banda se desperdicia cada vez que se inicia una aplicación redactando todos los datos anteriores.

Dado que los datos de la instantánea se encuentran en la memoria como un objeto JavaScript, debería ser bastante trivial serializarlo como JSON y guardarlos en LocalStorage, por lo que el estado de aplicación exacto se puede cargar la próxima vez que se inicie la aplicación, en línea o no. Pero como el código Firebase.js está minificado y críptico, no tengo idea de dónde mirar.

Bolsa Maneja esto muy bien en un backend de CouchDB. (Pero carece del tiempo de respuesta rápido y la simplicidad de Firebase).

Entonces mis preguntas son:

1. ¿Qué datos necesitaría para serializar para guardar una instantánea en LocalStorage? ¿Cómo puedo volver a cargar esto en Firebase cuando comience la aplicación?

2. ¿Dónde puedo descargar el código fuente de desarrollo no minificado original para Firebase.js?

(Por cierto, dos características que ayudarían a Firebase expulsar a la competencia del agua: almacenamiento en caché y mapa fuera de línea).

¿Fue útil?

Solución

El almacenamiento en caché fuera de línea y la funcionalidad de Reduce de MAP están en desarrollo. Firebase.js La fuente está disponible aquí para desarrollo y depuración.

Puede serializar una instantánea localmente usando exportval Para preservar todos los datos de prioridad. Si no está utilizando prioridades, un valor simple funcionará:

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

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

Más tarde, si Firebase está fuera de línea (use .info/conectado Para ayudar a determinar esto) Cuando se carga su aplicación, puede llamar .establecer() Para volver a colocar esos datos en la Firebase local. Cuando/si Firebase entra en línea, se sincronizará.

Sin embargo, esto realmente solo es adecuado para datos estáticos a los que solo una persona accederá y cambiará. Considere, por ejemplo, las consecuencias si descargo los datos, los mantengo localmente durante una semana, y está modificado por varios otros usuarios durante ese tiempo, luego cargo mi aplicación fuera de línea, hago un cambio menor y luego me pongo en línea. Mis cambios rancios desanimarían todo el trabajo realizado en el medio.

Hay muchas maneras de lidiar con esto: resolución de conflicto, utilizando reglas de seguridad y actualizar contadores/marcas de tiempo para detectar datos obsoletos y evitar regresiones, pero esto no es un asunto simple y necesita una consideración profunda antes de seguir esta ruta.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top