如果我有一个使用GraphQL + Apollo + React构建的应用程序,只是想知道我是否在页面上说了3个组件,每个组件都会进行不同的查询,这是否意味着将向客户端发出3个请求服务器和3将返回?当我收集GraphQL将API调用压缩为1个请求时,它有点工作方式,但是在上述场景中,从客户端到服务器,然后从服务器到客户端的请求,它如何工作?
答案 0 :(得分:1)
来自docs:
查询重复数据删除可以帮助减少通过网络发送的查询数量。默认情况下,它是打开的,但是可以通过向每个请求的上下文传递queryDeduplication:false或使用Apollo Client设置上的defaultOptions键来关闭它。如果打开,则查询重复数据将在查询到达网络层之前发生。如果许多组件显示相同的数据,但您不想多次从服务器获取该数据,则查询重复数据删除将很有用。通过将查询与当前进行中的所有查询进行比较来工作。如果当前正在执行相同的查询,则新查询将映射到相同的Promise,并在当前进行中的查询返回时解决。
换句话说,只要您未将queryDeduplication
设置为false
,如果Apollo匹配任何进行中的请求,就会跳过发送请求。
虽然GraphQL提供了在同一请求中发送多个查询的功能(而Apollo支持此功能),但由您自行编写这样的查询-GraphQL会不自动为您执行此操作。为了使用Apollo 批量多个查询到单个请求中,您必须使用apollo-link-batch-http。