Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/385.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 客户扇出真的是个好主意吗?_Javascript_Reactjs_Firebase_Firebase Realtime Database - Fatal编程技术网

Javascript 客户扇出真的是个好主意吗?

Javascript 客户扇出真的是个好主意吗?,javascript,reactjs,firebase,firebase-realtime-database,Javascript,Reactjs,Firebase,Firebase Realtime Database,我目前正在建立一个基于firebase的社区,它有类似Facebook的时间表和帖子。当用户创建一个帖子时,它会自动弹出在他或她的追随者的时间线上 谷歌建议通过扇出更新进行此操作: 但我想知道:如果一个用户有——比方说——2万个追随者,我首先必须下载他的所有追随者的列表(即使有像{:true}这样的索引,这也相当大),然后用扇出方法更新每个用户的时间表,如下所示: // followers = { <user-id-1>: true, <user-id-2>: true,

我目前正在建立一个基于firebase的社区,它有类似Facebook的时间表和帖子。当用户创建一个帖子时,它会自动弹出在他或她的追随者的时间线上

谷歌建议通过扇出更新进行此操作:

但我想知道:如果一个用户有——比方说——2万个追随者,我首先必须下载他的所有追随者的列表(即使有像
{:true}
这样的索引,这也相当大),然后用扇出方法更新每个用户的时间表,如下所示:

// followers = { <user-id-1>: true, <user-id-2>: true, ... }
const fanout = {};
const post = { text: 'foo', timestamp: firebase.database.ServerValue.TIMESTAMP };
Object.keys(followers).map((key) => {
    fanout[`timeline/${key}/${postId}`] = post;
});
firebase.database().ref().update(fanout);
//followers={:true,:true,…}
const fanout={};
const post={text:'foo',时间戳:firebase.database.ServerValue.timestamp};
Object.key(followers.map)(key)=>{
扇出[`timeline/${key}/${postId}`]=post;
});
firebase.database().ref().update(扇出);
安全规则也很难确定允许用户更新的时间线

我的方法是一个服务器,它监视全局posts ref。如果有更新或添加的子项,它会查找post创建者的追随者,并相应地更新时间线。这样,我就不必修改安全规则,客户机要做的工作也就少得多


我错了吗?

如果您愿意在服务器上运行风扇,请务必这样做。当要扇出的数据量变得太大而无法在客户端上运行时,它确实会消除一个潜在的瓶颈


但绝大多数项目永远不会达到这一水平,在项目生命周期的早期,许多开发人员不愿意运行服务器,即使只是为了分散数据。因此,对于这些开发人员来说,客户端扇出是一个很好的选择。

如果您愿意在服务器上运行扇出,请务必这样做。当要扇出的数据量变得太大而无法在客户端上运行时,它确实会消除一个潜在的瓶颈


但绝大多数项目永远不会达到这一水平,在项目生命周期的早期,许多开发人员不愿意运行服务器,即使只是为了分散数据。因此,客户端扇出对这些开发人员来说是一个很好的选择。

谢谢!在Firebase中,一切似乎都有点不同,所以这就是我想知道的原因。谢谢!在Firebase中,一切似乎都有点不同,所以我想知道为什么。