Mi aplicación produce páginas de 20 elementos de contenido que pueden incluir elementos que le gustan al usuario actual y a otros usuarios. Utilizo Firebase Realtime Database para realizar un seguimiento de los Me gusta, pero el contenido se almacena en otro lugar y las páginas se procesan en el servidor, por lo que se sirve una página completamente nueva cada vez. Necesito identificar y marcar los elementos que me gustan y mostrar el estado de cada elemento en tiempo real:
Para obtener la cantidad de Me gusta en tiempo real, recorro los elementos con esta función, modificada de la demostración de Firebase Friendlypix :
function registerForLikesCount(postId, likesCallback=null) { const likedRef = firebase.database().ref(`/liked/${postId}`); likedRef.on("value", function(snapshot) { if (snapshot.val()) { likesCallback(snapshot.val().count); } }); }Son 20 llamadas para cada página más un detector de eventos configurado, ¿verdad? Es rápido pero desconozco el costo. ¿Qué recursos se utilizan para todos esos oyentes a) si no pasa nada, o b) si se registra y transmite un me gusta a, digamos, 100 usuarios concurrentes?
Para realizar un seguimiento de si al usuario que ha iniciado sesión actualmente le ha gustado alguno de los elementos, lo he intentado de dos maneras:
Para cada página, obtenga los Me gusta del usuario de su nodo de Firebase. Esa es una llamada a Firebase, posiblemente tomando algunas docenas de ID (no más) y, durante el ciclo mencionado anteriormente, verifique si alguna de las ID está incluida.
O, usando un fragmento de Friendlypix, para otras 20 llamadas a Firebase:
function registerToUserLike(postId, callback) { // Load and listen to new Likes. const likesRef = firebase.database().ref(`likes/${postId}/${firebase.auth().currentUser.uid}`); likesRef.on('value', (data) => callback(!!data.val())); } registerToUserLike tiene la ventaja de mantener actualizadas las pestañas abiertas o los dispositivos del usuario y muestra la magia del tiempo real, pero ¿a qué precio?
Me gustaría saber qué recursos consume esta actividad para estimar el costo de ejecutar mi aplicación.
La sobrecarga en el protocolo Firebase para todos estos oyentes es mínima, cada uno envía la ruta que quiere escuchar al servidor (no es una operación paga para Firebase, pero su proveedor de telefonía móvil puede cobrar por el ancho de banda) y luego recibe los datos de la ruta. escucha y actualiza los datos en esa ruta.
La cantidad de llamadas no es una parte importante del costo aquí, por lo que la única forma de reducir el costo sería escuchar menos datos. En pocas palabras: importa muy poco si tiene 20 llamadas escuchando 1 nodo o 1 llamada escuchando 20 nodos en Firebase.
Para obtener más información sobre por qué ocurre esto, consulte mi respuesta a las preguntas sobre Acelerar la obtención de publicaciones para mi aplicación de red social mediante el uso de consultas en lugar de observar un solo evento repetidamente.