静态资源为什么要走 CDN

一个网站加载慢,很多时候不是服务器慢,而是资源离用户太远——服务器在华北,华南的用户每加载一个图片都要跑几万公里。CDN(内容分发网络)解决的就是这个距离问题:把静态资源提前缓存到离用户近的地方,用户就近取,不用再回源站跑一趟。

对一个静态站点(比如这个技术分享站)来说,图片、CSS、JS 这些资源占了加载大头,走 CDN 之后打开速度立刻能感觉到快一截。这一篇就讲 CDN 到底怎么工作、怎么配才真正有效。

CDN 不是把你的网站搬到云上,而是把你的静态资源"提前摆在用户家门口"。
本文核心知识点
  • 边缘节点CDN 在全国布了一堆缓存节点。
  • 命中率命中越高,回源越少,越快越省。
  • 缓存策略什么资源缓存多久,是个权衡。
  • 缓存刷新内容更新了,怎么让旧缓存失效。
CDN 与静态站点加速配图:中央空白云朵图标向四周边缘服务器节点放射箭头、再向底部一排用户显示器汇聚的蓝色扁平科技插画
用户就近从边缘节点取资源,不必每次都跑回源站。

CDN 是什么:边缘节点缓存

CDN 的原理可以想象成:在全国各个城市都摆了一堆"分店"(边缘节点),每个分店都缓存了你网站的静态资源。用户访问时,DNS 把他导到离他最近的那个分店,分店有这份资源就直接给他,不用跑回总店(源站)。

一次 CDN 请求的过程:
1. 用户请求一张图片
2. CDN 节点查自己有没有这份缓存
3. 有 → 直接返回(命中)
4. 没有 → 回源站拉一份,缓存下来,再返回(未命中)

第一次访问某个资源时还是要回源,但一旦缓存住,后面所有用户都从就近节点秒取。源站的压力也跟着小了——大部分请求 CDN 就挡掉了。

缓存命中率:CDN 值不值的关键

衡量 CDN 效果的核心指标是缓存命中率——一百个请求里,有多少个是 CDN 直接命中、没回源的。命中率越高,说明 CDN 真的挡住了流量:

命中率 = 命中次数 / 总请求次数

- 命中率 95%:几乎不回源,源站很轻松
- 命中率 50%:一半请求还在回源,CDN 作用打折
- 命中率很低:说明缓存策略有问题,或资源名字一直在变

命中率上不去,最常见的原因是资源文件名每次发布都变(比如带个新的 hash)。这本身是对的,但要配合正确的缓存策略——文件名变了,浏览器和 CDN 自然会去拿新的,旧缓存也不影响。

缓存策略:缓存多久才合适

缓存时间设多长是个权衡:设太长,内容更新了用户还看到旧的;设太短,缓存不住、回源多。经验法则是按资源类型分:

常见的缓存时长建议:
- 带 hash 的静态资源(app.abc123.js)→ 缓存很久(一年)
  因为文件名一变就是新资源,老缓存不用管
- 图片 → 缓存几小时到一天
- HTML 页面 → 缓存很短,或不缓存
  因为 HTML 是入口,要让用户看到最新版

记住一个原则:会变的入口(HTML)短缓存,不会变的静态资源(hash 文件)长缓存。这样既快、又能让更新及时生效。