Caching 缓存对象上的Apollo客户端查询重复数据消除
我最近在上读到一篇关于Apollo客户端缓存的文章 在这里 根据这篇文章,如果当前查询包含一个缓存对象以及其他对象,那么该查询将被重复数据消除,只查询其余的对象 但是,我通过在服务器上注销查询进行了一些测试,这表明该查询没有被部分重复数据消除。相反,整个查询被发送到服务器 任何人都能对此提供一些见解。非常感谢 测试: 第一个问题:Caching 缓存对象上的Apollo客户端查询重复数据消除,caching,graphql,apollo,apollo-client,Caching,Graphql,Apollo,Apollo Client,我最近在上读到一篇关于Apollo客户端缓存的文章 在这里 根据这篇文章,如果当前查询包含一个缓存对象以及其他对象,那么该查询将被重复数据消除,只查询其余的对象 但是,我通过在服务器上注销查询进行了一些测试,这表明该查询没有被部分重复数据消除。相反,整个查询被发送到服务器 任何人都能对此提供一些见解。非常感谢 测试: 第一个问题: { post(_id: 1) { _id title } } 第二个问题: { post(_id: 1) {
{
post(_id: 1) {
_id
title
}
}
第二个问题:
{
post(_id: 1) {
_id
title
}
author(_id: 1) {
_id
firstName
}
}
预期结果:
服务器接收到的secomd查询仅包含
author(_id: 1) {
_id
firstName
}
根据博客的说法,由于post(\u id:1)
在发送第一个查询后被缓存
实际结果:
服务器日志:(第二个查询未被重复数据消除)
在阿波罗客户端中有一个名为“查询重复数据消除”的主题
它来自阿波罗链接(阿波罗客户端的传输层)
但它所做的是消除当前正在获取的现有查询的重复数据
如果许多组件显示相同的数据,但您不想多次从服务器获取该数据,则查询重复数据消除可能非常有用。它通过将查询与当前正在运行的所有查询进行比较来工作
你可以阅读更多关于它和
但是它与缓存没有太大关系。
我认为您需要的是更好地了解Apollo Client中缓存的管理方式。
那么,Apollo Client中的缓存是如何处理的呢?
您可以从他们的官方文档中找到更多关于缓存的文章:
更具体地说,对于您的情况,我认为如果您使用/并确保fetchPolicy
是cache first
,那么它可能不会重新发送查询
我希望这能让您更好地了解Apollo客户端中的缓存
{
"operationName": null,
"variables": {},
"query": "{\n post(_id: 1) {\n _id\n title\n __typename\n
}\n}\n"
} /graphql 200 81 - 0.520 ms
{
"operationName": null,
"variables": {},
"query": "{\n post(_id: 1) {\n _id\n title\n __typename\n
}\n author(_id: 1) {\n _id\n firstName\n __typename\n }\n}\n"
} /graphql 200 140 - 0.726 ms