多次调用 Firebase 的效率或成本
Efficiency or cost of many calls to Firebase
我的应用程序生成包含 20 个内容项的页面,其中可能包括当前用户和其他用户喜欢的项目。我使用 Firebase 实时数据库来跟踪喜欢的内容,但内容存储在其他地方并且页面是服务器呈现的,因此每次都会提供一个全新的页面。我需要识别和标记喜欢的项目并实时显示每个项目的状态:
- 它的点赞数,以及
- 是否被当前用户点赞
为了实时获得喜欢的数量,我用这个函数循环遍历项目,修改自 Firebase Friendlypix demo:
function registerForLikesCount(postId, likesCallback=null) {
const likedRef = firebase.database().ref(`/liked/${postId}`);
likedRef.on("value", function(snapshot) {
if (snapshot.val()) {
likesCallback(snapshot.val().count);
}
});
}
每个页面调用 20 次并设置一个事件侦听器,对吗?挺快的,就是不知道费用。哪些资源用于所有这些听众 a) 如果没有任何反应,或者 b) 如果注册并传输了一个赞,比如 100 个并发用户?
为了跟踪当前登录用户是否喜欢任何项目,我尝试了两种方法:
对于每个页面,从用户的 Firebase 节点中获取用户的喜欢。这是对 Firebase 的一次调用,可能会获取几十个 ID(不多),并在上述循环中检查是否包含任何 ID。
或者,使用 Friendlypix 的片段,再调用 20 次 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
的优点是可以让用户打开的任何选项卡或设备保持更新并展示实时的魔力,但价格是多少?
我想了解此 activity 消耗了哪些资源,以便估算 运行 我的应用程序的成本。
所有这些侦听器的 Firebase 协议开销是最小的,每个侦听器发送它想要侦听的路径到服务器(不是 Firebase 的付费操作,但您的移动提供商可能会收取带宽费用)然后接收它侦听的路径中的数据并更新到该路径中的数据。
通话次数在这里并不是成本的重要组成部分,因此降低成本的唯一方法是收听更少的数据。简而言之:在 Firebase 中,您是有 20 个调用监听 1 个节点,还是有 1 个调用监听 20 个节点,这无关紧要。
有关原因的更多信息,请参阅我对有关
问题的回答
我的应用程序生成包含 20 个内容项的页面,其中可能包括当前用户和其他用户喜欢的项目。我使用 Firebase 实时数据库来跟踪喜欢的内容,但内容存储在其他地方并且页面是服务器呈现的,因此每次都会提供一个全新的页面。我需要识别和标记喜欢的项目并实时显示每个项目的状态:
- 它的点赞数,以及
- 是否被当前用户点赞
为了实时获得喜欢的数量,我用这个函数循环遍历项目,修改自 Firebase Friendlypix demo:
function registerForLikesCount(postId, likesCallback=null) {
const likedRef = firebase.database().ref(`/liked/${postId}`);
likedRef.on("value", function(snapshot) {
if (snapshot.val()) {
likesCallback(snapshot.val().count);
}
});
}
每个页面调用 20 次并设置一个事件侦听器,对吗?挺快的,就是不知道费用。哪些资源用于所有这些听众 a) 如果没有任何反应,或者 b) 如果注册并传输了一个赞,比如 100 个并发用户?
为了跟踪当前登录用户是否喜欢任何项目,我尝试了两种方法:
对于每个页面,从用户的 Firebase 节点中获取用户的喜欢。这是对 Firebase 的一次调用,可能会获取几十个 ID(不多),并在上述循环中检查是否包含任何 ID。
或者,使用 Friendlypix 的片段,再调用 20 次 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
的优点是可以让用户打开的任何选项卡或设备保持更新并展示实时的魔力,但价格是多少?
我想了解此 activity 消耗了哪些资源,以便估算 运行 我的应用程序的成本。
所有这些侦听器的 Firebase 协议开销是最小的,每个侦听器发送它想要侦听的路径到服务器(不是 Firebase 的付费操作,但您的移动提供商可能会收取带宽费用)然后接收它侦听的路径中的数据并更新到该路径中的数据。
通话次数在这里并不是成本的重要组成部分,因此降低成本的唯一方法是收听更少的数据。简而言之:在 Firebase 中,您是有 20 个调用监听 1 个节点,还是有 1 个调用监听 20 个节点,这无关紧要。
有关原因的更多信息,请参阅我对有关