Graphql 我应该尽量减少中继应用程序中的订阅数量吗?

Graphql 我应该尽量减少中继应用程序中的订阅数量吗?,graphql,relay,relaymodern,react-relay,graphql-relay,Graphql,Relay,Relaymodern,React Relay,Graphql Relay,我不熟悉使用graphql,我们已经使用elixir构建了一个后端graphql服务器,我们正在使用react和react relay构建一个前端应用程序 我的问题是,在查询呈现程序的根目录下有一个较大的订阅是否比为单个组件加载较小的订阅更好。我想我更喜欢使用大量较小的订阅,而不是使用较少(甚至一个)的非常大的订阅,但有人担心过多的订阅将非常繁重。这有效吗 TIA 这里有一些事情要考虑,而且,实际上,它们都取决于你对“非常重”的定义。注意“非常重”可能意味着Elixir服务器实现与客户机上的实

我不熟悉使用graphql,我们已经使用elixir构建了一个后端graphql服务器,我们正在使用react和react relay构建一个前端应用程序

我的问题是,在查询呈现程序的根目录下有一个较大的订阅是否比为单个组件加载较小的订阅更好。我想我更喜欢使用大量较小的订阅,而不是使用较少(甚至一个)的非常大的订阅,但有人担心过多的订阅将非常繁重。这有效吗


<> TIA

这里有一些事情要考虑,而且,实际上,它们都取决于你对“非常重”的定义。注意“非常重”可能意味着Elixir服务器实现与客户机上的实现有很大不同,因此我将尝试在这里介绍一些您可能希望研究的方向

  • 您的订阅传输是什么?WebSocket可能很昂贵,并且在某一点很难在两端进行扩展,但是如果您能够处理单向数据流(仅限于服务器到客户端),SSE(服务器发送的事件)是一个很好的选择。这更多的是对服务器的评论,而不是对客户端的评论

  • 从API设计的角度来看,我要提醒大家不要使用少数(或一个)大型订阅的想法。为什么?不可避免地,您将在客户机上推送从未要求过的数据;这会对客户端和服务器都造成不必要的工作。此外,单个组件应该只能使用专门为其指定的数据订阅数据尖叫。如果您选择大型订阅路线,则必须编写大量防御代码来过滤事件流,以查找所需的数据。这不应该是您微观管理的责任,更不用说服务器上的脏事件流了

这也不一定会引导您走上“小额订阅”路线。最后,你可能想看看,它比我自己更清楚地表达了我对这件事的看法。TL;DR设计订阅API,这样您就可以享受大量小型订阅(作者称之为“每个实体”)带来的严格范围内的好处,但仍然允许您共享有效负载并重用与解析数据相同的处理程序

另外,如果您想使用混合方法,它将更好地为您服务