版本发布后页面底部的构建号已经变了,列表里显示的还是昨天的价格,接口返回的 updatedAt 停在昨天下午六点。碰到这种情况,我一般先确认改动有没有真的生效。

原因不复杂,接口响应被运行时缓存按 URL 存了下来,URL 没变就一直命中旧副本。页面版本更新和接口缓存是两套逻辑,前者换了不代表后者失效。

「更新后数据仍旧」这类改动最怕改一半,回滚脚本先准备好,再动生产。改完顺手把文档补一句,省得下次自己重新推一遍。

fetch('/api/list', {cache: 'no-store'});
// 或 caches.keys() 过滤 api- 前缀后逐个 delete

监控和日志的时间要对上,时区不一致会多绕很大一圈。临时改动用注释写上日期和原因,过两周自己都记不清为什么这么写。

具体做法是,接口请求统一加 cache: 'no-store',别让 fetch 走 HTTP 缓存;缓存策略改成 network-first,只在上游不可用时读旧数据;发布后主动清一次接口缓存前缀,避免首屏读到旧值。

最后用这个标准收尾,发布后首次打开列表,价格和 updatedAt 与后台一致,不再出现昨天的数据。

作者 9823189