# 首字节时间与 CDN 对比？

**URL:** https://meta.discourse.org/t/first-byte-time-vs-cdn/141899
**Category:** Development
**Created:** [2020 年2 月 18 日 14:14 UTC](https://meta.discourse.org/t/first-byte-time-vs-cdn/141899 "2020-02-18T14:14:33Z")
**Posts on this page:** 16
**Page:** 1

<div class="post-metadata">

### Author: ![eextra](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/eextra/32/170266_2.png) [@eextra](https://meta.discourse.org/u/eextra)
#### Post date: [2020 年2 月 18 日 14:14 UTC](https://meta.discourse.org/t/first-byte-time-vs-cdn/141899/1 "2020-02-18T14:14:33Z")

</div>

使用 CDN 加载页面与不使用 CDN 有何区别？你们使用的是哪种类型的提供商？

我在使用 CDN 时加载时间明显更长。是不是我哪里操作有误，或者有什么我不了解的地方？也许我还需要设置一些我不了解的配置？

---

<div class="post-metadata">

### Author: ![pfaffman](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/pfaffman/32/120154_2.png) [@pfaffman](https://meta.discourse.org/u/pfaffman)
#### Post date: [2020 年2 月 18 日 14:51 UTC](https://meta.discourse.org/t/first-byte-time-vs-cdn/141899/2 "2020-02-18T14:51:44Z")

</div>

CDN 在缓存资源之前速度会较慢。在进行任何测试之前，您可能需要等待一段时间。

---

<div class="post-metadata">

### Author: ![eextra](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/eextra/32/170266_2.png) [@eextra](https://meta.discourse.org/u/eextra)
#### Post date: [2020 年2 月 18 日 19:28 UTC](https://meta.discourse.org/t/first-byte-time-vs-cdn/141899/3 "2020-02-18T19:28:12Z")

</div>

好吧，第一个线索……感谢。  
一点点。多少？我们说的是几天还是几周？

我们应该强制使用 HTTPS 还是 HTTP 发送负载？我问这个问题是因为加载方式存在差异。这取决于页面是完整加载，还是看起来就像原始 JavaScript 未被加载？

---

<div class="post-metadata">

### Author: ![marianord](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/marianord/32/90502_2.png) [@marianord](https://meta.discourse.org/u/marianord)
#### Post date: [2020 年2 月 18 日 19:45 UTC](https://meta.discourse.org/t/first-byte-time-vs-cdn/141899/4 "2020-02-18T19:45:14Z")

</div>

时间框架将取决于用户如何与网站交互。下载量最多的资源将被加载到 CDN 缓存中，如果您离 CDN 服务器比离源服务器更近，访问速度会更快。

如果您的数据中心就在附近，而 CDN 服务器距离 1000 公里，那么访问速度始终会更慢。CDN 的理念是为地理分布广泛的受众提供更好的服务，而不是优化集中式的访问。

---

<div class="post-metadata">

### Author: ![eextra](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/eextra/32/170266_2.png) [@eextra](https://meta.discourse.org/u/eextra)
#### Post date: [2020 年2 月 18 日 20:11 UTC](https://meta.discourse.org/t/first-byte-time-vs-cdn/141899/5 "2020-02-18T20:11:43Z")

</div>

但我们要讨论的是在将 CDN 地址添加到我们的 app.yml 文件之后出现的情况吗？

那么，为什么 CDN 地址要使用子域名呢？也就是说，为什么不能是 DISCOURSE\_CDN\_URL: [//637763234.cdn-provider.com](https://637763234.cdn-provider.com)，而必须是 [discourse-cdn.example.com](http://discourse-cdn.example.com) 呢？

---

<div class="post-metadata">

### Author: ![eextra](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/eextra/32/170266_2.png) [@eextra](https://meta.discourse.org/u/eextra)
#### Post date: [2020 年2 月 18 日 20:13 UTC](https://meta.discourse.org/t/first-byte-time-vs-cdn/141899/6 "2020-02-18T20:13:20Z")

</div>

> [@marianord](#):
>
> 时间范围将取决于用户如何与网站互动。

是的，我知道，但我正在使用来自世界不同地区的多种测试工具进行检查。而且 CDN **总是** 更慢！

---

<div class="post-metadata">

### Author: ![Falco](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/falco/32/179432_2.png) [@Falco](https://meta.discourse.org/u/Falco)
#### Post date: [2020 年2 月 18 日 20:34 UTC](https://meta.discourse.org/t/first-byte-time-vs-cdn/141899/7 "2020-02-18T20:34:50Z")

</div>

您具体是指哪条路径上的 TTFB？

对于静态资源（如 JS 文件或用户上传的 JPG），使用 CDN 时 TTFB 始终会很快，因为多个 PoP 的低延迟有助于提升性能。

另一方面，动态路由的 TTFB 则没有比较的意义，因为我们的 `DISCOURSE_CDN_URL` 本身就不覆盖这些路由。

---

<div class="post-metadata">

### Author: ![eextra](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/eextra/32/170266_2.png) [@eextra](https://meta.discourse.org/u/eextra)
#### Post date: [2020 年2 月 18 日 20:48 UTC](https://meta.discourse.org/t/first-byte-time-vs-cdn/141899/8 "2020-02-18T20:48:40Z")

</div>

> [@Falco](#):
>
> 具体是哪个路径？

你能具体解释一下你的意思吗？

我提供的是测试论坛的结果。（顺便说一句，它只是稍微快了一点）// 但这仅适用于没有内容的崭新域名。

 ![image](https://global.discourse-cdn.com/meta/original/3X/4/5/45836689dd47774f179c0db071d5a4e2b7f1003e.png)

以及为 CloudFront 创建的结果：

 ![image](https://global.discourse-cdn.com/meta/original/3X/2/6/26ba75a3a49bf90b5b50b85c46ff38a5b35e907d.png)

---

<div class="post-metadata">

### Author: ![Falco](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/falco/32/179432_2.png) [@Falco](https://meta.discourse.org/u/Falco)
#### Post date: [2020 年2 月 18 日 20:50 UTC](https://meta.discourse.org/t/first-byte-time-vs-cdn/141899/9 "2020-02-18T20:50:13Z")

</div>

您看到的只是正常的波动。CDN 不会影响您的 Discourse 实例根路径或任何其他动态路由的首字节时间。CDN 仅用于提供静态资源。

---

<div class="post-metadata">

### Author: ![eextra](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/eextra/32/170266_2.png) [@eextra](https://meta.discourse.org/u/eextra)
#### Post date: [2020 年2 月 18 日 20:54 UTC](https://meta.discourse.org/t/first-byte-time-vs-cdn/141899/10 "2020-02-18T20:54:41Z")

</div>

那么，如果这些资源（静态资源）存放在 S3 中，会有区别吗？

---

<div class="post-metadata">

### Author: ![marianord](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/marianord/32/90502_2.png) [@marianord](https://meta.discourse.org/u/marianord)
#### Post date: [2020 年2 月 18 日 21:06 UTC](https://meta.discourse.org/t/first-byte-time-vs-cdn/141899/11 "2020-02-18T21:06:18Z")

</div>

不，没有。CDN 会在需要时从 S3 缓存这些资源。

> [@eextra](#):
>
> 那么使用子域名作为 CDN 地址的原因是什么？

那只是一个装饰性地址，完全不需要。

---

<div class="post-metadata">

### Author: ![eextra](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/eextra/32/170266_2.png) [@eextra](https://meta.discourse.org/u/eextra)
#### Post date: [2020 年2 月 18 日 21:08 UTC](https://meta.discourse.org/t/first-byte-time-vs-cdn/141899/12 "2020-02-18T21:08:35Z")

</div>

> [@marianord](#):
>
> 不，没有。CDN 会在需要时从 S3 缓存这些资源。

我原本希望 CDN 能加快页面加载速度，但我想效果可能微乎其微。

除了增加 RAM 和 CPU 资源外，还有其他更有效的方法可以加快全球不同地区的页面加载速度吗？

---

<div class="post-metadata">

### Author: ![Stephen](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/stephen/32/95011_2.png) [@Stephen](https://meta.discourse.org/u/Stephen)
#### Post date: [2020 年2 月 18 日 21:59 UTC](https://meta.discourse.org/t/first-byte-time-vs-cdn/141899/13 "2020-02-18T21:59:28Z")

</div>

TTFB 是应用服务器发送 200 响应所需的时间。您无法通过 CDN 提升它，因为 CDN 仅用于提供静态资源。

---

<div class="post-metadata">

### Author: ![marianord](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/marianord/32/90502_2.png) [@marianord](https://meta.discourse.org/u/marianord)
#### Post date: [2020 年2 月 18 日 22:09 UTC](https://meta.discourse.org/t/first-byte-time-vs-cdn/141899/14 "2020-02-18T22:09:55Z")

</div>

这将加快页面速度，但不会加快首字节时间。您将加快多媒体（图片、PDF、视频）和 JavaScript 的加载。这将提升网站的响应速度，但所有动态内容仍需从中央服务器加载。

因此，例如用户头像的加载会更快，但主题标题则不会。

---

<div class="post-metadata">

### Author: ![Falco](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/falco/32/179432_2.png) [@Falco](https://meta.discourse.org/u/Falco)
#### Post date: [2020 年2 月 18 日 22:17 UTC](https://meta.discourse.org/t/first-byte-time-vs-cdn/141899/15 "2020-02-18T22:17:37Z")

</div>

由于 Discourse 会阻塞渲染以等待 JavaScript 和 CSS 加载，因此通过利用 CDN 仍然可以更快地使页面具备交互性。

进行此类分析需要比盲目运行 Lighthouse 和 WebPageTest、随意选取结果并过度纠结于它更多的内容。

如果你的目标是让页面在这些工具中获得更高的分数，我建议使用如 [https://jekyllrb.com/](https://jekyllrb.com/) 等工具驱动的博客。

---

<div class="post-metadata">

### Author: ![eextra](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/eextra/32/170266_2.png) [@eextra](https://meta.discourse.org/u/eextra)
#### Post date: [2020 年2 月 19 日 13:00 UTC](https://meta.discourse.org/t/first-byte-time-vs-cdn/141899/16 "2020-02-19T13:00:09Z")

</div>

> [@Falco](#):
>
> 进行此类分析，不能只是盲目地运行 Lighthouse 和 WebPageTest，然后挑选一个结果并对此 obsessing。

那我该如何进行分析呢？
