You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

URQL如何判断返回数据来自缓存还是服务器 含Graphcache使用场景

URQL Graphcache 相关问题解答

1. 第二个查询关联的author是否会走缓存

默认配置下会,前提是满足两个条件:

  • 你的Graphcache没有自定义修改主键规则,默认会用id作为实体的唯一主键
  • 第一个查询返回的author实体的id,和第二个查询返回的post关联的author的id完全匹配,且第二个查询要求的author字段(id、name、twitterHandler)已经全部在第一个查询中请求过并存入缓存

这种情况下第二个查询发起时,post的主体数据(id、body、title)会向服务器请求,但关联的author字段会直接从缓存读取,不需要重复向服务器索要对应字段。

2. 判断数据来源的方法

  • 看查询返回的元数据:URQL 每个查询返回的结果附带的上下文里,operation.context.resultOrigin字段标识了结果来源,值为cache说明全量结果来自缓存,值为network说明结果来自服务器;如果是部分命中缓存的场景,你也可以监听cacheHit事件来感知缓存命中行为。
  • 对比网络请求和最终拿到的结果:如果第二个查询的网络响应里已经返回了author的全量字段,但最终你拿到的结果里的author字段和缓存中更早的author数据一致(比如你中途修改过缓存里的author数据),就说明这部分数据走了缓存。

3. 控制台日志标识方法

你可以在初始化URQL客户端时开启调试模式,配置示例:

import { Client, cacheExchange, fetchExchange } from '@urql/core';

const client = new Client({
  url: '/graphql',
  exchanges: [cacheExchange, fetchExchange],
  // 开启调试模式
  debug: true,
});

开启后浏览器控制台会输出Graphcache的全量操作日志,会明确标注哪些实体、哪些字段命中了本地缓存,哪些数据是从网络响应更新到缓存的。


内容的提问来源于stack exchange,提问作者Ерлан Темир

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 02:24:07