Al colocar un escucha de base de datos en tiempo real:
firebaseDb.ref(ref).on('value', (snapshot) => { console.log('snap', snap); const response = snapshot.val(); });La instantánea se almacena en caché para un uso posterior sin conexión. Si ahora actualizo la página, mi console.log aparecerá dos veces en mi consola. La primera será la instantánea almacenada en caché, la segunda será la instantánea del servidor.
Mi aplicación es bastante compleja y solo para darle un ejemplo, he anidado el enlace de datos de la siguiente manera:
const userBind = (userRef: string) => firebaseDb.ref(userRef).on('value', (snapshot) => { console.log('snap', snap); const user = snapshot.val(); store.commit(SET_USER, user); getUserFriends(user) }); const getUserFriends = await (user: User) => { const userFriends = async getUserFriendsData() // call our backend store.commit(SET_USER_FRIENDS, userFriends); }; Ahora, store.commit(SET_USER, user); se llama dos veces, así como getUserFriendsData() que comienza a ser un problema de rendimiento. Creo que mi mejor opción aquí sería deshabilitar el almacenamiento en caché de la base de datos en tiempo real.
Sería bueno tener una función similar a la del SDK de Android: FirebaseDatabase.getInstance().setPersistenceEnabled(true);
¿Qué piensan ustedes?
Saludos cordiales, Florián.
Desafortunadamente, el comportamiento fuera de línea en Realtime Database está "construido" sin mucho control sobre cómo funciona. Con Firestore , podría detectar con los metadatos si los datos provienen del caché o del servidor. Tal vez una migración a esa base de datos sería una solución.
Con Realtime Database, puede desconectarse del servidor con goOffline y volver a conectarse más tarde para guardar los datos en el servidor. Pero eso se siente como una solución desordenada. Al usar esto, solo recibiría datos del caché, pero tampoco podría obtener nuevos datos del servidor.
También puede optimizar la administración de su estado para que no se vuelva a procesar si recibe los mismos datos utilizando una comparación reducida de los datos que recibe y la estadística ya está almacenada.