跳到主要内容

CDN

cdn 最大的坏处是没有缓存

第三方服务器不会给你做强缓存/协商缓存

前言

利用 cdn 可以有效减少 node_modules 依赖占用

但是所谓依赖包,就需要专门进行版本管理,而且还有第三方 cdn 被频繁访问带来的流量限制和种种风险

所以利用 cdn 缓存依赖包资源的方案,实现难度比较大

定义

CDN 即内容分发网络(Content Delivery Network)的简称,是建立在承载网基础上的虚拟分布式网络,能够将源站内容(包括各类动静态资源)智能缓存到全球各节点服务器上。这样不仅方便了用户就近获取内容,提高了资源的访问速度,也分担了源站压力。

加速域名

加速域名指需要使用 CDN 加速的域名。加速域名也是一个域名。加速域名一般配置 CNAME 记录,指向 CDN 网络节点。普通域名一般配置 A 记录,指向提供服务的业务服务器。

工作原理

假设我建立了一个网站,域名为“www.tt.com”,用户访问的主页链接为“www.tt.com/idx.html”。为了缓解服务端压力和加快访问速度,决定使用阿里云 CDN 服务。 为了更好地理解工作原理,先了解一下 CDN 的接入流程。

接入流程 主要接入步骤如下:

  1. 到某域名供应商处申请一个加速域名:“js.tt.com”。
  2. 到阿里云 CDN 平台添加加速域名“js.tt.com”,同时设置其源站域名为“www.tt.com”。
  3. 阿里云 CDN 平台自动分配一个 CNAME 域名:“js.tt.com.ali.com”。
  4. 到域名供应商处给加速域名“js.tt.com”添加 CNAME 记录,其值为上一步得到的 CNAME 域名:“js.tt.com.ali.com”。 对以上步骤做进一步说明:
  • 为了使用 CDN,必需另外再申请一个加速域名,作为使用 CDN 的入口。
  • 加速域名配置的是 CNAME 记录,值为 CDN 平台提供的 CNAME 域名,该 CNAME 域名指向 CDN 系统节点。
  • 添加加速域名时需要配置源站域名,据此,CDN 平台保存了加速域名与源站域名的映射关系。
  • CNAME 域名的格式一般是:<加速域名> + <供应商主域名>

用户 A 的第一次访问流程如图 1 所示: 需要进一步说明的是:

  • 第 1 步访问的是加速域名,而不是源站域名。
  • 第 3 步返回 CNAME 域名。
  • 第 5 步返回 CNAME 域名对应的 IP 地址,指向 CDN 边缘层节点。
  • 第 6 步请求的 URL (或者说 Referer )仍为‘js.tt.com/idx.html’。
  • 第 7 步请求中心层节点时,会带上第 6 步的 URL 作为参数。
  • 第 8 步通过查询配置数据得到源站域名,进而向源站发起请求。这里的业务服务器即为 CDN 的源站。简单起见,省略了从 DNS 服务器查询 A 记录的过程。
  • 在整个过程中,URL 的域名会变化,但是 URL 的路径不会变化。

第二次

  • 由于本地 DNS 客户端拥有了加速域名的解析缓存,就不需要再查询 DNS 服务器了。
  • 由于 CDN 边缘层节点有了对应资源的缓存,就不需要再向上请求资源了。

常用的模块 cdn 网站

jsdelivr unpack 基本用这两种 cdn 提供云上的 js 框架和类库包

skypack