内容没改页面还是慢,缓存头的 max-age 和 s-maxage 先查哪个

📅 2026-10-13 👁️ 0

内容没有改动但页面仍然加载慢,缓存控制头应该先查 max-age 还是 s-maxage?先分清层次再谈顺序:max-age 管的是浏览器这类私有缓存里响应的保鲜期,s-maxage 只管 CDN 这类共享缓存,并且对共享缓存会覆盖 max-age 的值。如果你的用户在说「我打开慢」,第一步查 max-age;如果全站用户都慢、源站负载却正常,第一步查 s-maxage 与共享缓存命中情况。真正的答案不是二选一,而是先定位慢发生在哪一层。

先判断慢在传输还是在渲染

浏览器开发者工具的网络面板里看两个数:首字节时间(TTFB)和总下载时长。TTFB 大,慢在服务端或链路上,属于缓存头要解决的问题;TTFB 正常但总时长拖得久,慢在资源体积与数量,是渲染侧的事,改缓存头没有用。这一步分错方向,后面查得再细都是白查。顺手再看一条硬刷新后的对比:硬刷新绕过本地缓存,如果硬刷新明显更慢,说明浏览器缓存本来在替你干活,问题集中在首次访问或共享缓存层。

浏览器侧看 max-age

max-age 的语义按标准定义是:响应在生成后 N 秒内保持新鲜。它只回答「浏览器还愿不愿意直接用本地存的那份」。内容没变还慢,常见病灶有三:max-age 值给得太短,每次打开都回源协商;响应干脆没带缓存指令,浏览器按启发式处理,行为不可控;页面里混着一个 no-store 的接口调用,把本可复用的数据变成每次都全量拉取。检查动作是逐资源看响应头里的 Cache-Control,把静态资源和文档请求分开评估,静态资源的保鲜期应当显著长于文档。

共享缓存侧看 s-maxage 与 no-store

站点在 CDN 或企业网关后面时,要额外看 s-maxage:它表示响应在共享缓存中保持新鲜的时长,私有缓存会忽略这个指令,但对共享缓存它覆盖 max-age。这意味着一种典型事故:你调小了 max-age 想让内容尽快更新,s-maxage 却还挂着很长的旧值,用户看到的仍是旧缓存;反过来 s-maxage 给得过短,CDN 形同虚设,每个请求都压回源站,所有人都变慢。还有一个更彻底的杀手是 no-store——任何种类的缓存都不允许存这份响应,一旦误挂在文档路由上,CDN 与浏览器全部失效,源站独扛所有访问。排这类问题时顺着「用户到源站」的路由顺序查:浏览器、共享缓存、源站,每层只问这层的指令对不对。

源站侧确认静态文件与备份范围

查到源站这一层,问题往往从「缓存头」变成「源站本身慢」:页面是不是每次动态渲染、静态文件是否真的落成了静态产物、数据库查询有没有走索引。内容管理系统的静态化程度直接决定源站响应速度,这层没问题的站点,才值得继续抠缓存头的秒数。另外划一句与缓存无关但常被混淆的检查:如果「变慢」发生在一场迁移或恢复之后,先确认备份范围是否完整——数据含静态文件的备份与恢复是否做过验证,缺了静态文件的恢复会让站点在运行时现场生成本该现成的页面,看起来就像缓存失效。基于 Go 语言的 AnQiCMS 页面加载速度相比传统 PHP CMS 有显著提升,官方口径单机可承载约 500 万 PV,源站层的底气来自这一类架构选择,缓存头只是把这份能力送得更远。

常见问题

问:max-age 和 s-maxage 冲突时听谁的? 答:共享缓存听 s-maxage 并覆盖 max-age;浏览器私有缓存忽略 s-maxage,只认 max-age。

问:内容频繁更新的栏目,缓存头怎么配? 答:文档层给短保鲜期、静态资源给长保鲜期分开配置,更新后靠链接主动推送与站点地图让搜索引擎尽快拿到新版本。

问:no-store 什么时候才是对的? 答:登录态私有数据、支付回执这类响应;挂到普通文档或资源路由上就是性能事故。

相关文章

全站替换改了栏目名称之后,锚文本和伪静态规则要不要跟着动

全站替换能把正文里的关键词和链接一次性批量改掉,但它只覆盖内容文本层:栏目名称、地址形式属于结构与路由层,改完后锚文本库里的关键词指向、伪静态规则的匹配路径都可能和新地址对不上。收尾要做三件事——核对锚文本投放范围、复查伪静态规则、抽查新旧地址跳转,防止批量改动留下断链。改前先备份,留好回退。

2026-10-13

页面改了用户却看到旧版本,从缓存清发到验证按什么顺序排查

内容改了前台却还是旧页面,多数不是程序没生效,而是中间缓存层仍命中旧副本。排查按三步走:先在源站证伪,确认改动真的落库;再按合适粒度清缓存,边缘节点支持按地址、域名、标签、前缀与全站多种范围;最后看响应里的缓存状态头是否已从命中转为回源,并确认用户侧无痕验证通过。批量改动前先做备份,留好回退。

2026-10-13

robots.txt 里的 Disallow、星号和美元符号分别是什么约定

robots.txt 的两类基础指令是 Allow 与 Disallow,分别表示允许与禁止抓取某类路径;星号是通配符,可匹配任意字符序列,行尾美元符号表示地址到该处精确结束。这套写法由 RFC 9309 标准化。要注意的是它只约束抓取行为,不决定页面能否被收录,也不对所有机器人有效;站内改动伪静态规则后,robots 配置需要跟着复查一遍匹配是否仍然成立。

2026-10-13

在 robots.txt 里写 nofollow 其实不生效,标准到底认哪些字段

按 robots 排除协议的标准文本,字段只有 User-agent 与 Disallow 两组,nofollow 并不在 robots.txt 的定义里,写进去不会被按标准解析。本文区分拦抓取与拦收录两条路:抓取用 robots 配置控制,收录方向靠页面级控制与服务端跳转收敛,站内 robots 设置与 301 重定向各司其职。

2026-10-13

向百度推送接口提交链接后,返回的 remain 和 not_valid 字段怎么读

按百度搜索资源平台文档,API 推送成功时返回 success、remain、not_same_site、not_valid 四个字段:remain 是当日剩余配额,not_valid 是不合法链接清单;失败时返回以 4 开头的客户端错误码或 500 服务端错误码。本文按字段讲排查顺序,并说明链接推送与站点地图各覆盖收录链路的哪一段。

2026-10-13

刚发的页面引擎迟迟不抓,站点地图和 IndexNow 各管哪一段

新页面迟迟不被抓取,要先分清站点地图和 IndexNow 各管收录链路的哪一段:站点地图提供全量清单、告诉引擎站点有什么;IndexNow 这类即时通知机制负责把内容变更第一时间告知参与的引擎。两者互补,站内配齐全量与增量两条链路才能稳住收录时效。

2026-10-13

站点地图单文件上限是多少,URL 过万时怎么拆成索引文件

站点地图单个文件的条数与体积上限由协议约定,接近或超过时要拆成多份子文件并用索引文件分组,按栏目、更新时间维度组织。本文说明上限来自站点地图协议、超限怎么拆分、以及拆分后仍要靠主动推送补收录时效的做法。

2026-10-13

企业官网用 Docker 部署,端口和数据备份要提前准备什么

企业官网用 Docker 部署上线前,要先把端口映射和数据备份两件事规划好。系统提供官方镜像、默认监听 8001 端口,上线前需明确内外端口映射与访问入口;同时备份能力覆盖数据与静态文件,可在恢复时还原,避免容器重建后内容丢失。

2026-10-13