Hydrogen 的 storefront.query 总是返回旧数据
现象#
后台把商品标题改成新文案,Hydrogen 的 PDP 刷新十几次仍是旧标题;重启 dev server 会恢复,Oxygen 上的预览也一样。
原因#
- storefront.query 默认带 public, max-age=1, stale-while-revalidate=86399,一天内都可能返回旧对象
- 缓存 key 由查询文本与 variables 组成,handle 没变就会一直命中同一条
- 整页响应也被 Oxygen 缓存,子请求更新了但 HTML 没换
- 购物车、顾客这类个性化查询没传 CacheNone,被当成公共数据缓存
处理步骤#
- 商品详情用
cache: storefront.CacheShort(),购物车与库存用storefront.CacheNone() - 若已升级到 2026-10,改用
Cache.short()与Cache.none(),旧 helper 会报不是函数 - 在 loader 里打印
response.headers.get('age'),确认是否命中旧缓存 - 商品更新 webhook 到达后调用 revalidate,或按 cache tag 清除对应查询
- 确认 variables 里包含 country 与 language,避免多市场结果互相覆盖
验收标准#
改标题后首次刷新 age 接近 0,页面显示新文案;cart 查询响应头为 no-store。
本文由 风格技术 技术团队整理,适用于 Shopify 标准版与 Plus 店铺。Shopify 平台能力迭代较快,具体操作路径与字段以官方文档和店铺后台实际版本为准。