首页 > 解决方案 > Apollo Client + Server 如何处理同一个查询中重复的相关节点?

问题描述

Apollo Client + Apollo Server 如何处理同一个查询中重复的相关节点?

假设我有这个查询:

query {
  parents {
    id
    name
    child {
      id
      name
      secondChild {
        id
        name 
      }
    }
  }
}

响应具有重复的相关节点(ID 为 sc1 的 secondChild 节点)。该节点的数据是否通过网络发送了两次?还是阿波罗足够聪明,只发送一次?

res = [
{
    id: p1
    name: "Parent one"
    child[
    {
        id: c1
        name: "Child one"
        secondChild: {          # This is duplicated below 
            id: sc1
            name: "Second Child one"
        }
    },
    {
        id: c2
        name: "Child two"
        secondChild: {          # This is duplicated above
            id: sc1
            name: "Second Child one"  
        }
    }
    ]
}]

这个例子非常简单,但想象一下 sc1 的负载更大,并且重复了很多次。

标签: reactjs

解决方案


我遵循了 Tarun 的建议并检查了对我的阿波罗服务器的网络响应。看起来不,Apollo 在获取重复记录时不会优化您的网络调用。

虽然这将是一个很好的功能。也许你可以在他们的 github 上用这个建议创建一个问题,看看他们是否把它作为他们的开发管道。或者您可以尝试自己实现并创建一个拉取请求以与我们其他人分享。:)


推荐阅读