我最近在official blog上阅读了一篇有关Apollo客户端缓存的文章,其中包含screenshot 这里。
根据该文章,如果当前查询包含一个缓存的对象以及其他对象,则该查询将被删除重复数据,仅查询其余对象。
但是,我通过在服务器上注销查询进行了一些测试,这表明查询并未进行部分重复数据删除。而是将整个查询发送到服务器。
任何人都可以对此提供任何见解。非常感谢。
测试:
第一个查询:
{
post(_id: 1) {
_id
title
}
}
第二个查询:
{
post(_id: 1) {
_id
title
}
author(_id: 1) {
_id
firstName
}
}
预期结果: 服务器收到的第二查询仅包含
author(_id: 1) {
_id
firstName
}
自博客发送以来,由于post(_id: 1)
已在发送第一个查询后被缓存。
实际结果: 服务器日志:(第二个查询已未重复数据删除)
{
"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
答案 0 :(得分:0)
Query deduplication
中有一个名为Apollo-Client
的主题
来自Apollo-Link
(Apollo-Client
的传输层)的
但是它的作用是删除当前正在获取的现有查询的重复数据
如果许多组件显示相同的数据,但您不想多次从服务器获取该数据,则查询重复数据删除将很有用。它通过将查询与当前当前在飞行中的所有查询
进行比较来工作
但是它与缓存没有太大关系。.
我认为您正在寻找的是更好地了解如何在Apollo-Client
中管理缓存
那么Apollo-Client
中如何处理缓存?
您可以在以下官方文档中找到有关该缓存的更多文章:apollo-client-caching
更具体地讲,我相信如果您使用watchQuery / query并确保fetchPolicy
为cache-first
,那么它可能不会重新发送查询
我希望这可以使您更好地了解Apollo-Client
中的缓存