javascript - 从 CDN 提供许多依赖项会减慢站点速度吗?

标签 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 。然而,这意味着用户无法从其他站点缓存此组合,因此他们可能会下载更多数据。

最佳答案

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

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

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

缺点:

  1. 您需要再次进行 DNS 查找。
  2. 您至少还需要一个 TCP 连接,且该连接不能重复使用之前打开的连接。
  3. 您最终可能会发现给定客户端可以连接到您的服务器,而 CDN 则无法连接。

优点:

  1. 您的服务器要做的工作更少。
  2. 除非连接已达到最大,否则客户端从两台服务器下载的速度可能比从一台服务器下载的速度更快。
  3. 如果该资源很受欢迎,则特定客户端很有可能在访问您的网站之前就拥有缓存的副本,因此要么根本不需要点击它,要么只需足够长的时间即可获得 304(并且DNS 查找已完成)。

最后一个pro仅适用于您使用共享发布资源 URI 的情况,不适用于您自己托管的 CDN 服务。不过,这种情况允许更多地使用同一个 CDN,因此专业人士将适用于其他资源。

平衡不仅可以朝任一方向发展,而且可以对某些客户有利,而对另一些客户有利。

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

关于javascript - 从 CDN 提供许多依赖项会减慢站点速度吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32555267/

相关文章:

android - 如何知道 HTML5 中的音频路径(Chrome 浏览器 - iOS/Android)

javascript - 如何单击链接(菜单)打开选项卡?

Facebook 评论 (fb :comment) returning httpS content when called over http?

python - HTTP 代理服务器 [Python]

html - 使用视频标签播放 m3u8 视频

javascript - karma 自定义测试页

Javascript 函数不显示随机消息

Java applet 错误...出了什么问题?

javascript - 为我们的 JavaScript 库 API 编写文档

javascript - document.write 阻止我打印