服务于CDN的许多依赖项会减慢网站的速度吗?

时间:2015-09-13 22:46:11

标签: javascript html http tcp cdn

如果我的网站上有一个HTML页面,其中有大量脚本标记指向http://cdnjs.cloudflare.com,这会减慢页面加载速度吗?我认为它将在一个TCP连接中获取它们,但会产生多个GET请求,而如果我从我自己的服务器提供它们,那么所有的javascript都可以连接成一个文件。这会产生重大影响吗?是否可能CDN的速度优势(缓存,接近等)至少会使其无效?

更新:我刚刚发现了jsDelivr,它实际上提供了它所托管的库的任意连接,例如: https://cdn.jsdelivr.net/g/react@0.13.3,jquery@2.1.4。但是,这意味着用户无法从其他网站缓存此组合,因此他们可能会下载更多数据。

2 个答案:

答案 0 :(得分:1)

多次下载需要多个HTTP连接。

多个HTTP连接不需要多个TCP连接,因为现有的TCP连接可以用于后续请求(甚至可能在处理上一个请求之前,如果使用了流水线)。

除了您的特定情况可以在允许您发出单个请求的机制与需要多个请求的机制之间进行选择之外,还有以下优点和缺点:

缺点:

  1. 您需要另一次DNS查询。
  2. 您至少还需要一个不能重复使用先前打开的连接的TCP连接。
  3. 当CDN不是时,最终您的服务器可以与给定的客户端联系。
  4. 优点:

    1. 你的服务器的工作量较少。
    2. 除非连接已被最大化,否则客户端可能会从两台服务器上下载速度超过一台服务器。
    3. 如果资源很受欢迎,那么某个客户在访问您的网站之前就有很好的机会获得缓存副本,因此根本不需要点击它,或者只需要足够长的时间来获取304(并完成DNS查找)。
    4. 最后一个 pro 仅适用于您使用共享的已发布资源URI,而不是将CDN服务用于您自己的托管。虽然这种情况允许更多地使用相同的CDN,因此专业人员将适用于其他资源。

      天平不仅可以采用任何一种方式,而且可以为某些客户提供一种方式,为其他客户提供另一种方式。

      一般来说,当谈到效率问题时,我们可以而且必须在一定程度上推理这个问题,只有测试才能真正告诉我们哪个更有效率。这也是如此,但必须在不同的场景中进行测试,并模拟不同的客户端位置。如果一个人最终不会成为这些不同场景的赢家,那么你可以猜测哪些对你来说最重要。

答案 1 :(得分:0)

它不会在一个连接中获取所有内容;将为每个人提出单独的请求。对网站性能的影响将取决于客户端已缓存的数量,但通常较少的脚本请求将具有更高的性能。正如@ user3211152建议的那样,将您的依赖项连接并缩小为单个文件,并(可选)从CDN提供它,以提高全球访问的可靠性/访问速度。