只要对自己的网站跑一次免费的速度测试,迟早会看到一行建议,叫你“serve static assets from a CDN”或“使用内容分发网络”。听上去好像每个网站都必须有。本指南用通俗的话说明什么是CDN、它能解决和不能解决什么、谁真正受益、如何用前后对比测试来决定,以及应当先修复什么。本文刻意保持通用:不推荐任何CDN公司,也不说明任何主机的服务器在哪里、速度有多快。
用大白话说,CDN是什么
CDN(content delivery network,内容分发网络)是一种服务:它把你网站的文件副本存放在许多地点的服务器上,并从离访客最近的服务器把副本送出去。存放你真实网站的服务器称为源站(origin)。CDN的服务器常称为边缘节点(edge),存放不常变动的文件副本:图片、字体、CSS样式文件和JavaScript。有人打开你的页面时,页面本身通常仍然来自你的主机,但它所需的配套文件可以从附近的边缘节点送达,而不是从很远的地方传来。
距离之所以重要,是因为文件不会瞬间到达。每个请求都要在网络上来回一趟,而一个页面可能需要几十个请求。与服务器处于同一地区的访客几乎感觉不到这一趟;身处另一个大洲的访客,每个文件都会感觉到。CDN缩短的是它所存放文件的路程。它不会让你的服务器更快地生成页面,也不会把过大的文件变小。
第一个向边缘节点索取某个文件的访客可能仍要等一下,因为边缘节点要先向你的源站取一次;之后的访客就能拿到存好的副本。此外,CDN通常架在你的网站前面,也就是在访客和主机之间多了一项服务。这正是它的好处与风险的共同来源。
CDN实际上为页面做了什么
一个网页很少只有一个文件。页面本身(HTML)由你的网站生成,然后再引入所需的其他文件。这两类文件的表现不同:
- 静态文件对每位访客都一样:图片、标志、字体、CSS和JavaScript文件、可下载的PDF和视频。它们很容易复制,也可以从任何地方提供。这正是CDN的强项。
- 动态页面是针对每次请求生成的:搜索结果页、购物车、登录后的账户页、显示库存或从数据库读取价格的页面。必须由你的源站来生成,所以基础的CDN设置会把这些请求直接转给你的主机。
有些设置还可以在边缘节点存放整个HTML页面。这是更强也更有风险的设置,因为规则一旦出错,存放的页面可能过时,或被展示给不该看到的人。请把它视为进阶选项。
CDN可以在三个方面帮上忙:减少静态文件因距离造成的延迟;分担主机上的一部分文件流量,在许多人同时到来时有帮助;减少主机发送大文件所消耗的带宽。这三点都与静态文件和访客所在位置有关,没有一点是关于你的网站建得好不好。

CDN解决不了什么
对CDN的失望,大多来自指望它修复其实出在别处的问题。在付费或设置之前,先把你看到的症状对应到常见原因。
| 你注意到的现象 | CDN有帮助吗? | 通常的原因 |
|---|---|---|
| 页面要等很久才出现内容 | 帮助很小,如果延迟来自服务器生成页面 | 数据库查询慢、插件过多或过重、没有页面缓存、方案资源吃紧 |
| 照片在手机上加载很慢 | 有一点,但把文件变小帮助大得多 | 图片远大于所占的位置,或使用旧格式 |
| 页面跳动或反应迟钝 | 没有 | 脚本过重、页面构建器代码、内容晚加载造成的版面偏移 |
| 只有海外访客觉得慢 | 有,这是典型情形 | 访客与源站之间距离很远 |
| 文章走红或促销开始时网站变慢或出错 | 部分:静态文件被分担,动态页面仍会到达你的主机 | 方案限制、同时访问人数多、动态页面没有缓存 |
规律很简单:如果慢在生成页面,CDN无法加快;如果慢在跨越长距离发送大文件,CDN就可能有帮助。关于网站为什么慢的WordPress指南深入讨论了第一类问题,资源限制指南说明了账户超负荷时是什么样子。这两种问题都不会因为前面多了一个CDN就消失。
谁可能受益,谁大概不会
最有力的判断依据是你的访客在哪里、你的主机在哪里,其次是每个页面带有多少大文件。
| 你的情况 | 可能的收益 | 原因 |
|---|---|---|
| 客户主要在马来西亚,网站很轻,只有几张优化过的图片,主机不错 | 很小 | 距离本来就短,也没有多少静态内容要搬 |
| 有海外客户、游客或海外华人读者(例如向国外发货的商店) | 常常很明显 | 这些访客离源站很远,每个文件都能感觉到距离 |
| 图片很多的网站,如作品集、餐厅、房产或产品图库 | 中等到较大 | 大型静态文件多;CDN可以分担,不过先把文件变小帮助更大 |
| 因广告、促销或媒体报道而经常出现流量高峰 | 中等 | 静态请求分散到CDN,而不是全部落在一台服务器上 |
| 只有五个页面和一个联系表单的简介型网站 | 非常小 | 可缓存的内容少,又多了一样要管理的东西 |
| 因插件或主题过重而变慢的网站 | 在修复这些之前帮助很小 | 瓶颈不在文件传送 |
如果你主机的服务器已经在客户所在的地区或附近,CDN能缩短的距离就更少。请向你的主机询问你的账户从哪里提供服务;本指南不说明Gotka的服务器在哪里。如果你不确定网站由谁托管,查出谁在托管你的网站这篇指南介绍了检查方法,包括CDN如何掩盖真正的主机。
手机也很重要:移动网络下,页面太重比在电脑上更明显,这也是要在传送之前先处理图片体积的原因之一。移动优先指南解释了为什么。
如何解读速度报告里的“serve static assets from a CDN”
速度测试工具会给出一长串建议,而且按“容易检测”来排序,并非按“对你的网站最有帮助”来排序。不同工具的措辞不同,也会随时间变化,所以请把下表当作理解某一行含义的方法,而不是任何一份报告的原文。
| 常见报告行(意译) | 含义 | 对本地小型网站的实际影响 | 先做这个 |
|---|---|---|---|
| 使用CDN/从CDN提供静态文件 | 你的文件都来自同一个地点 | 访客在本地则影响低;访客较远则更高 | 先看访客在哪里;优化图片大小 |
| Serve static assets with an efficient cache policy | 浏览器被告知太频繁地重新下载文件 | 对回头客为中等 | 在服务器或缓存工具里设置更长的浏览器缓存 |
| 正确设置图片尺寸/使用新一代图片格式 | 图片比需要的更大 | 在手机上影响高 | 调整尺寸并压缩图片 |
| 缩短服务器响应时间 | 服务器要很久才开始发送页面 | 高,而且静态文件的CDN改变不了它 | 页面缓存、减少插件、检查方案 |
| 减少未使用的JavaScript或CSS | 页面载入了却没用到的代码 | 中等到高 | 删除不用的插件,换用更轻的主题 |
某一行出现在报告里,并不代表它就是你最大的问题,因为许多工具会给几乎所有网站类似的建议。请看每一行旁边的预计节省量,从最大的开始,再按下文的方法认真测量。
考虑CDN之前,先修复什么
这些修复成本低、风险小,对本地读者来说通常比CDN消除更多的延迟。请按这个顺序做。
- 图片大小和格式。直接从手机相机导出的照片往往比网页所需的大得多。把它们调整到实际显示的最大尺寸,压缩,并在工具支持时使用新格式。这是最常见的见效办法。
- 服务器端缓存。如果主机会缓存页面,重复的请求就不必每次重新生成页面。LiteSpeed与Apache主机对比解释了服务器级的页面缓存,WordPress速度指南则说明了为什么同时运行多个缓存工具会出问题。
- 浏览器缓存。为静态文件设置较长的缓存时间,回头客就不必重新下载。“efficient cache policy”那一行讲的往往就是这个,它在你的服务器上或由缓存工具设置,有没有CDN都一样。
- 插件和页面构建器。每个启用的插件都可能增加脚本和样式。删除你不用的,并警惕叠加多个功能相同的插件。
- 你的方案和存储空间。超出方案承载能力的网站,无论前面放什么都会慢。请参阅何时该升级主机方案的迹象和网站存储空间指南,了解大型媒体库是怎样累积起来的。
做完这些步骤后,再测量一次。许多小型网站会发现“使用CDN”那一行重要性大减,或者页面已经快到没人在意了。
如何做CDN的前后对比测试
不要凭一次测试下结论。CDN的价值取决于测试从哪里发起、文件是否已经被存放过,以及当时网络有多忙。下面是一个公平又简单的方法。
- 选三个页面。你的首页、最重的页面(图片最多)和一个与收入有关的页面,例如产品页或联系页。
- 从客户所在的地方测试。选一个靠近主要读者的测试地点;如果有海外客户,再选一个他们所在的地点。许多速度测试工具可以选择地点,你也可以用手机的移动数据在真机上检查。
- 测试首次访问。使用无痕窗口或全新的测试,让浏览器里没有任何缓存。回头客是另一种情形,请单独测试。
- 重复几次。每项测试至少跑三到五次,在不同时段进行,取中间值,而不是最好或最差的结果。
- 每次记录同样的几个数字。首字节时间(TTFB,服务器开始发送之前要等多久)、最大内容绘制(LCP,最大的可见内容何时加载完成)、页面总大小和请求数。谷歌公布的指引把2.5秒或以内的最大内容绘制视为良好,而首字节时间通常以约0.8秒或以内为良好目标,两者都是在真实访问的第75百分位上衡量。
- 只改一样,再测一次。每次只为一项改动开启CDN,并等DNS和缓存稳定下来再做第二轮。缓存清空后测一次首次访问(较慢的“冷”情形),之后再重复几次(“热”情形),分别记录。
- 拿同类的数据比较。相同的页面、相同的地点、相同的工具、相近的时段。如果差异小于你自己几次重复测试之间的差距,就当作没有差别。
实验室数据来自模拟访问,适合在受控条件下比较一项改动。真实用户数据来自真实访客的长期积累,反映他们的体验,但需要足够的流量,也要几周才会变化。用实验室测试来决定;若网站访客足够多,再用真实用户数据来确认。同时问一个人性化的问题:客户有没有察觉?页面从很快变成稍微更快,不值得为此多一个活动部件。
需要权衡的风险与成本
即使开启时不花钱,CDN也不是毫无后果。以下是小企业最常踩的坑。
- 编辑之后内容过时。存放在边缘节点的副本,可能在你修改价格、营业时间或横幅之后继续显示旧版本。缓存通常发生在多个层次(你的插件、你的服务器、CDN、访客的浏览器),只清除其中一层,其他层仍会提供旧页面。要知道如何清除CDN里的存放副本,并在未登录状态下用无痕窗口检查改动,因为登录后的管理员视图常会绕过缓存,掩盖问题。
- 表单、购物车和登录页面。因人而异的页面,或包含表单、购物车、结账或账户区域的页面,绝不能被存放后展示给别人。确保它们在每一层页面缓存中都被排除,包括任何服务器级缓存。配置错误的缓存可能把一位客户的资料展示给另一位客户,或让结账失效。
- DNS和SSL的变更。许多CDN需要修改域名的DNS记录来设置,访客、CDN与你的主机之间的加密连接也必须配置一致。不一致会造成安全警告,或页面无休止地重定向。请在安静的时段操作,并写下当前的DNS设置以便撤销,同时确认电子邮件仍然正常。
- 多一个要管理的账户。CDN有自己的登录、账单邮箱和设置。如果设置它的人离开了,你就有了一项没人找得到的服务。请把登录信息留在公司手里,正如谁在托管你的网站这篇指南所提醒的。
- 成本。许多CDN服务提供功能有限的免费档,付费档通常按功能或流量收费。免费不等于不费力:真正的成本是你的时间,以及纠正错误的代价。请阅读服务商当前的条款,不要依赖一篇博客文章。
- 功能重叠。有些主机、建站工具和网店平台本来就通过CDN提供文件。加第二层之前先确认。
决策清单
按顺序回答。遇到第一个能说明问题的行就可以停下。
| 问题 | 如果是 | 如果否 |
|---|---|---|
| 大多数访客在马来西亚或附近,网站也很轻吗? | 先优化图片、缓存和插件;CDN可有可无 | 继续 |
| 有客户离你的主机很远吗(海外买家、跨地区读者)? | 值得测试CDN | 继续 |
| 即使优化之后,页面仍有很多大图片或下载文件吗? | CDN可以分担,测试一下 | 继续 |
| 慢的是服务器响应吗(动态页面首字节时间偏高)? | 先看缓存、插件和方案,再考虑CDN | 继续 |
| 你的平台已经包含CDN吗? | 没有理由就不要再加一个 | 继续 |
| 有人能管理DNS、清除缓存并留意过时页面吗? | 你可以安全地运行一个 | 先找人帮忙,或者不用CDN |
| 前后对比测试在关键地方显示出明显改善吗? | 保留,并记下如何关闭 | 关闭,或不采用 |
常见错误
- 用CDN去修复缓慢的服务器。它改变不了数据库和插件生成页面所花的时间。
- 只在一个地点测一次。从遥远的测试地点得到的单个结果,可能夸大马来西亚客户面对的问题。
- 什么都缓存。购物车、结账、账户和表单页面必须排除。
- 不记录设置。没有DNS设置、登录信息,也不知道如何关闭。
- 编辑后忘记清除缓存。然后纳闷为什么还在显示旧价格。
- 叠加缓存却没有一张图。插件缓存、服务器缓存和CDN缓存全开,没人确定是哪一层存着旧页面。
- 追求分数而不是访客。报告上的完美数字,不如页面在客户手机上加载得好重要。
Gotka Technologies的定位
Gotka的Go AI主机方案在LiteSpeed服务器上运行cPanel,提供免费SSL、每日备份、免费迁移,以及通过客户专区工单提供的24/7支持,36个月的Go AI Lite方案每月RM17.80起;方案对比和cPanel指南说明了各档方案和控制面板涵盖的内容。本指南只泛泛地介绍CDN。它没有说明任何Gotka方案包含、捆绑或集成CDN,也没有说明Gotka的服务器位于何处或响应有多快,所以如果你想知道自己的方案在这些方面提供什么,请在依赖之前通过客户专区提交工单询问。Gotka的网站设计套餐列明包含页面速度优化,这同样不是关于CDN的声明。
本指南的关键术语
- CDN(内容分发网络):把你网站文件的副本存放在多个地点,并从离访客较近的服务器提供的服务。
- 源站(origin):存放你真实网站的服务器,通常是你的主机。
- 边缘节点(edge):靠近访客的CDN服务器,存放并提供你文件的副本。
- 静态文件:对每位访客都一样的文件,如图片、字体、CSS或JavaScript文件。
- 动态页面:针对每次请求生成的页面,如购物车或账户页。
- 首字节时间:服务器开始发送页面之前所需的时间。
- 最大内容绘制:页面上最大的可见内容加载完成的时间。
- 缓存:存放起来的副本,免得重新生成或重新下载。
- DNS:告诉浏览器某个域名指向哪台服务器的系统。
用大白话说,CDN是什么?
CDN(内容分发网络)会把你网站的图片、字体、CSS和脚本副本存放在多个地点的服务器上,并从离访客较近的一台提供出去。页面本身通常仍来自你的主机。它缩短的是这些静态文件的路程,对离服务器很远的访客有帮助,但不会让你的服务器更快地生成页面。
马来西亚的小网站需要CDN吗?
起初大概不需要。如果访客大多在马来西亚、主机响应还不错、页面又很轻,CDN带来的帮助很有限。请先优化图片大小、服务器缓存和插件数量,再做测试。如果你有海外客户、页面图片很多,或因广告和促销带来流量高峰,那么CDN值得测试。
CDN解决不了什么?
CDN无法修复缓慢的数据库、臃肿的页面构建器、过大的图片、过多的插件,也无法加快购物车、结账或账户页等动态页面的服务器响应。如果延迟来自服务器生成页面,CDN只会把请求转给你的主机,页面仍然会慢。
速度报告建议我从CDN提供静态文件,我该照做吗?
把它当作需要调查的建议,而不是命令。先看这一行旁边的预计节省量,以及你的访客在哪里。对本地读者来说,调整图片尺寸和设置更长的浏览器缓存通常节省更多。如果访客很远或页面图片很多,先做前后对比测试再决定。
怎样测试CDN是否对我的网站有帮助?
选三个页面,从客户所在的地方测试,把首次访问测几次,取中间值。记录首字节时间、最大内容绘制和页面大小。只改动CDN这一项,然后在冷、热两种情况下重复同样的测试。如果改善小于你自己几次重复测试之间的差距,就当作没有改善。
使用CDN有哪些风险?
主要风险包括:编辑内容后页面过时;缓存把错误的页面提供给表单、结账或登录区域;DNS和SSL设置不当造成警告或重定向循环;以及多出一个要管理的账户。免费档确实存在,但真正的成本是设置所花的时间和纠正错误的代价。


