🌐 CDN 与静态托管
一句话定性
CDN 是”算力位置一路向用户靠近”这条主线上的第一步:它不改变代码在哪渲染,只是把已经生成好的静态产物复制到全球边缘节点,让用户就近取货。它把”延迟”这个物理问题,从”加快服务器”变成了”缩短距离”。
一、它是什么 & 出现的时代
CDN(Content Delivery Network,内容分发网络) 是一张遍布全球的边缘服务器网络,把同一份静态资源(JS/CSS/图片/字体/HTML)缓存到离用户最近的节点。用户请求时,DNS 把他导向最近的边缘节点,而不是远在另一个大洲的源站(origin)。
- 起源:CDN 本身是 1998 年 Akamai 就有的老技术,最初服务于大文件分发(视频、软件下载)。
- 真正成为前端标配:是在 2013-2018 SPA时代——当前端产物从”服务器现拼的页面”变成”一堆固定的静态文件”时,CDN 才与前端命运绑定。
关键认知
CDN 不是”渲染层”,而是”分发层”。它本身不执行业务逻辑、不渲染页面,只做一件事:把静态字节尽可能贴近用户地缓存住。理解这一点,才能理解后来 Edge边缘运行时的飞跃——Edge 是”让分发层也能跑代码”。
二、为什么会出现(解决上一代什么痛点)
在 2005-2013 Ajax时代及更早,资源都从单一源站发出。问题是物理的:
中心化源站的硬伤
- 延迟由距离决定:用户在悉尼,服务器在弗吉尼亚,一个 round-trip 就是几百毫秒,光速是上限,优化代码也救不了距离。
- 源站带宽 = 瓶颈 = 单点:所有用户的所有请求都砸向同一台(组)机器,流量高峰直接打垮源站。
- 重复传输浪费:同一个
jquery.min.js,每个用户都从源站完整下载一遍。
CDN 的答案直击本质:既然延迟由距离决定,那就把内容搬到离用户更近的地方。 这是典型的第一性原理——不去对抗光速,而是缩短传输距离。
三、核心机制 & 为什么流行
边缘缓存的工作流
首次请求(缓存未命中 / cache miss)
用户 ──► 最近边缘节点 ──(回源)──► 源站 origin ──► 拿到资源
└─► 缓存一份在边缘 ──► 返回给用户
后续请求(缓存命中 / cache hit)
用户 ──► 最近边缘节点 ──► 直接命中缓存,毫秒级返回(不再回源)
- 就近:DNS / Anycast 把用户路由到地理或网络上最近的节点,延迟从”跨洲”降到”同城”。
- 缓存:静态资源带上长缓存头(
Cache-Control: max-age)+ 文件名哈希(app.a1b2c3.js)→ 内容变了文件名就变,既能永久缓存又能即时更新(cache busting)。 - 卸载源站压力:绝大多数请求在边缘就被消化,源站只在 cache miss 时被回源打扰,轻松扛住流量洪峰。
为什么 SPA / SSG 时代 CDN 成了标配
静态化与 CDN 是天作之合
- 2013-2018 SPA时代的 SPA:产物就是一个
index.html壳 + 一堆带哈希的 JS/CSS chunk——全是静态文件,天然适合往 CDN 上一扔。- SSG(见 渲染模式演进史):构建时就把所有页面预渲染成静态 HTML,部署目标天生就是 CDN。SSG 的”最快最便宜”恰恰是因为它把渲染结果变成了可被 CDN 缓存的静态字节。
这就是为什么 渲染模式演进史里渲染策略的选择,永远和部署目标深度纠缠:渲染产物越静态,CDN 就越好用。
静态托管平台的兴起
当前端产物变成”纯静态文件”后,部署门槛骤降——不需要服务器,只需要一个能托管文件 + 套 CDN 的地方。于是一批”零运维静态托管”平台崛起:
| 平台 | 特点 | 时代意义 |
|---|---|---|
| GitHub Pages(2008) | 直接把仓库里的静态文件免费托管 | 让”个人/开源项目零成本上线”成为常态 |
| GitLab Pages / Surge / Firebase Hosting | 一行命令推静态文件 | 把”部署”从运维活变成开发活 |
| Netlify(2015 起) | Git push 即构建即部署 + 全球 CDN | 把静态托管推向”工作流”层面,直接催生了 Jamstack |
从"上传文件"到"连接仓库"
早期静态托管还是手动
ftp/rsync上传产物;GitHub Pages 让”提交即发布”;Netlify 更进一步——连接 Git 仓库,push 自动构建 + 自动分发到 CDN。部署彻底变成了开发者工作流的一部分,这正是 Jamstack 工作流的雏形。
四、带来的新问题 / 副作用
CDN 不是免费的午餐
五、为什么会衰落 / 现状
CDN 没有衰落,而是”长进了骨头里”,并向上进化。
- 作为分发层,CDN 是今天每一个前端项目的默认基础设施,只是越来越透明——Netlify / Vercel / Cloudflare 把 CDN 内置进部署流程,开发者甚至感知不到它的存在。
- 真正的进化是:CDN 节点从”只会缓存静态文件”变成了”能跑代码”。Cloudflare Workers、Edge边缘运行时让边缘节点拥有了计算能力——这意味着”个性化的动态内容”也能在离用户最近的地方生成。CDN 不再只是货架,它变成了前置厨房。
传统 CDN Edge 运行时
[只缓存静态] ──► [边缘也能跑逻辑]
货架 货架 + 前置厨房
六、对后续技术的影响(因果链)
中心化源站(延迟由距离决定,源站是单点瓶颈)
│ "既然延迟由距离决定,就把内容搬近用户"(第一性原理)
▼
CDN(边缘缓存静态资源,就近分发)
│ SPA/SSG 产物天然静态 ──► CDN 成为前端标配
▼
静态托管平台(GitHub Pages → Netlify "push 即部署 + 自带 CDN")
│ "部署"从运维活变成开发工作流
▼
[[Jamstack]](预构建静态 + CDN 分发 + 客户端调 API)
│ 但 CDN 只能缓存"对所有人一样"的内容,个性化/动态无解
▼
[[Edge边缘运行时]](让边缘节点也能跑代码 ──► 动态内容也能像静态一样快)
历史地位
🔗 相关:部署与托管演进史 | Jamstack | Serverless与FaaS | Edge边缘运行时 | 渲染模式演进史 | 2013-2018 SPA时代 | 2018-2023 工程化时代