缓存为什么能让网站变快
一次完整的跨境请求,时间主要花在"距离"上:光速有限,链路越长、经过的网络设备越多,延迟越高。缓存的本质是用空间换距离——把内容复制到离用户近的边缘节点,把上百毫秒的跨境往返变成十几毫秒的同城访问。
两种结果的差距非常直观:
| 场景 | 请求路径 | 典型延迟 |
|---|---|---|
| 缓存命中(HIT) | 用户 → 边缘节点 | 10 ~ 30ms |
| 缓存未命中(MISS) | 用户 → 边缘节点 → 源站 → 边缘节点 → 用户 | 150ms 以上 |
所以 CDN 性能优化的核心指标就是缓存命中率:命中率越高,越多请求在边缘就被消化,用户体验越好,源站压力也越小。
缓存的生命周期:TTL 与缓存键
每个缓存对象都有一个 TTL(Time To Live,存活时间)。在 TTL 内,节点直接返回缓存副本;TTL 过期后,下一次请求会触发回源刷新。TTL 可以由两处决定:
- 源站响应头:
Cache-Control: max-age=86400表示允许缓存一天;no-store则完全禁止缓存; - CDN 控制台规则:按路径、后缀设置缓存时间,可覆盖源站头(例如强制图片缓存 30 天)。
节点用缓存键(默认是 URL)区分不同对象。这也是常见的坑:如果 URL 上带了随机参数(如 ?t=1690000000),每个请求的缓存键都不同,命中率会直接归零。
提升命中率的五个实践
- 静态资源设置长 TTL:图片、字体、构建产物(带哈希文件名的 JS/CSS)可以缓存 7~30 天,更新靠改文件名而不是清缓存;
- 规范化 URL:去掉无意义的查询参数,或在 CDN 配置中忽略指定参数,避免缓存键碎片化;
- HTML 用短 TTL 而不是不缓存:给页面 30~300 秒的短缓存,高并发时能挡住绝大多数回源;
- 动静分离:接口走动态加速(不缓存但走优化链路),资源走强缓存,各得其所;
- 关注命中率报表:命中率明显偏低时,优先排查
Cache-Control响应头与带参 URL。
缓存之外:动态内容怎么办
登录态接口、订单查询这类动态内容无法缓存,但 CDN 依然有价值:请求在边缘节点就近接入,回源走平台优化过的骨干链路(如 CN2),TCP/TLS 连接由节点与源站长连接复用——即使 0% 缓存的纯 API 业务,接入后延迟通常也能下降 30% 以上。
经验法则:静态内容看命中率,动态内容看回源链路质量。两者一起构成了完整的加速效果。
如果你的源站在海外、用户在大陆,回源链路的选择尤其关键,可以继续阅读《CN2 GIA 是什么?跨境线路选择指南》。