jQuery 的内容交付网络:您已获得服务!
在 2013 年,MaxCDN 加入 jQuery 基金会,并开始为 jQuery CDN(位于 code.jquery.com)提供内容交付网络 (CDN) 服务。现在可以通过 HTTP 和 HTTPS(SSL)协议请求文件,无论是下载到您自己的服务器上还是直接在生产网站上使用。MaxCDN 的基础设施可以通过遍布全球的高速服务器网络可靠地交付 jQuery 文件,从而最大程度地减少往返时间。
为什么 CDN 对开发人员很有用
显而易见的好处是,MaxCDN 网络比普通服务器快得多,并且在地理上分布,因此往返时间保持较低。但是,还有一个微妙的好处。许多网站只是从同一个域中提供所有内容(HTML、CSS、脚本、图像和其他资源)。这会导致浏览器和服务器的瓶颈。从多个域下载内容(称为 域分片)可以提高性能。请记住,就像任何好东西一样,过度使用是一个 坏主意。一些研究表明,只有两个域可能是最佳选择。使用 WebPageTest 等工具测试您的网站,以获得最佳结果。
为什么 CDN 对 jQuery 项目很有用
jQuery 项目会提供大量的字节,尤其是在项目发布新版本的日子里。当开发人员争先恐后地下载最新版本时,我们需要能够处理负载。GitHub 在支持我们的开发周期和工作项目文件方面做得很好,但它并非设计用于提供数十亿个生产文件的副本。谷歌和微软也提供 CDN,但是从项目发布到文件出现在这些 CDN 上可能需要几天时间。第三方 CDN 也有一些关于哪些文件可以放在 CDN 上的规则,例如,它们不会发布预发布版本。jQuery CDN 使我们能够完全控制时间和内容。
提供数十亿个文件,万亿个字节
我们认为我们提供很多文件,但是 MaxCDN 的一些统计数据确实说明了这一点。在 2013 年的最后五个月里,CDN 提供了超过 820 亿个文件,超过了 3.6 PB。我们发送的字节数足以完全填满 3,269 个 1 TB 的磁盘驱动器!CDN 上的平均日数据量约为 20 TB。
以下是从 CDN 请求的十个最受欢迎的文件
# | 文件名 | 命中次数 (十亿) |
大小 (太字节) |
---|---|---|---|
1 | jquery-latest.js | 6.36 | 404.65 |
2 | jquery-1.9.1.min.js | 5.93 | 193.96 |
3 | jquery-1.7.2.min.js | 4.95 | 154.50 |
4 | jquery-latest.min.js | 4.45 | 116.08 |
5 | /ui/1.10.3/jquery-ui.js | 4.18 | 484.58 |
6 | jquery-1.9.1.js | 2.45 | 178.54 |
7 | jquery-1.10.1.min.js | 2.27 | 71.62 |
8 | jquery-1.7.1.min.js | 2.26 | 78.05 |
9 | jquery-1.4.2.min.js | 2.07 | 39.80 |
10 | /ui/1.10.3/ |
1.55 | 9.83 |
这里有一些令人鼓舞的迹象。一些最受欢迎的文件是压缩文件,对于生产网站来说应该如此。同样令人鼓舞的是,jQuery Core 的最新版本 (1.9.1 和 1.10.1) 位列榜首。这意味着很多 jQuery 开发人员一直在跟上我们添加的功能和错误修复。
最常请求的文件是 jquery-latest.js,它会在 jQuery Core 团队发布新版本时自动更新。开发人员永远不要在生产网站上使用 jquery-latest.js 或 jquery-latest.min.js,它主要用于测试。类似地,位置 5 的完整 jQuery UI 构建是最新版本,但是对于只需要几个 jQuery UI 小部件的生产网站来说,该文件可能并不合适。可以在 下载构建器页面 上构建一个包含所需小部件的压缩副本。
依靠 CDN
感谢 MaxCDN 的贡献,jQuery 基金会拥有一个内容交付网络,该网络为我们所有项目文件提供可靠的高速访问。 code.jquery.com 上的文件是所有 jQuery 项目发布的官方存储库。您可以下载文件以供本地使用,也可以直接从您的网页引用我们的域,以利用 CDN 和域分片。
这些数字太疯狂了!人们是否没有使用缓存?
我发现 jQuery CDN 相对来说不太为人所知,大多数人仍然使用 Google 和 MSFT CDN 终结点。考虑到这一点,很难相信 jQuery CDN 的数字如此之高。
@Roger 我可以确认这些数字确实是真的。这让我想知道谷歌和微软处理了多少请求。我真的很希望他们能更透明地公布这些数据。
使用 code.jquery.com CDN 与 Google CDN 相比有什么优势?一个明显的缺点是 code.jquery.com 的 SSL 配置目前不安全。根据 https://www.ssllabs.com/ssltest/analyze.html?d=code.jquery.com,它支持匿名(不安全)密码套件,导致评级为 F。另一方面,Google 的 CDN 域获得了 A 评级:https://www.ssllabs.com/ssltest/analyze.html?d=ajax.googleapis.com
EFF 已经详细介绍了(实际上是安全的)https 连接的重要性,并且公开跟踪进度(例如,请参阅 https://www.eff.org/deeplinks/2013/11/encrypt-web-report-whos-doing-what)。
@John 感谢您提请我们注意这一点。我今天会和我们的工程师谈谈,看看我们如何解决这个问题。
我在 gtmetrix.com 上进行了一些性能测试
它对使用 code.jquery.com 托管资源有一些建议
它要求
指定一个 Vary: Accept-Encoding 标头
以下可公开缓存、可压缩的资源应该具有“Vary: Accept-Encoding”标头;
这是否可以通过我的 htaccess 配置?您需要进行更改吗?
我检查了 asp.net 托管版本,它在 gtmetrix 上没有提供 vary accept 建议
以及压缩 JavaScript
压缩以下 JavaScript 资源可以将它们的大小减少 87B(减少 1%)
我知道这只有几字节,但每字节都很重要,尤其是在从各种来源提供大量数据时
谢谢
@Justin 当然,希望 SSL 能得到修复。我们应该关注这里是否有更新吗?
嗨,
为什么不是通过网页浏览器本身提供服务器 404.65 TB 的 jQuery 数据?
为什么我们不将所有流行的 js 框架捆绑到 bowser 内部,并将 html 文件本地引用它?
这不可能吗?浪费 404.65 TB 的带宽是不必要的!!
@Matt 我会和 jQuery 基础设施团队讨论 Accept-Encoding 头部。 这是一个非常简单的修复,我在去年写过一篇关于它的文章 (http://j.mp/1fRJMDJ)。
@John 是的,我们将在本线程以及我们的博客上更新信息。 我们本周正在测试新的密码,以确保性能不会受到任何影响。
@Matt 与基础设施团队合作,“Vary: Accept-Encoding” 头部现在已在所有资源上可用。
curl -I code.jquery.com/jquery-1.10.2.min.js
HTTP/1.1 200 OK
Date: Mon, 20 Jan 2014 18:47:22 GMT
[已剪切]
Vary: Accept-Encoding
@John 我们更新了密码,现在我们在各个方面都获得了 A:https://www.ssllabs.com/ssltest/analyze.html?d=code.jquery.com
再次感谢您告知我们。
好消息,感谢您的更新,@Justin! 真是太棒了,这个问题被如此迅速地解决了。
@justin
感谢您和基础设施团队的更新。 它运行完美。
有考虑过额外的压缩吗?
我认为这与第 1 行和第 2 行的注释标签有关。
John & Matt -
我们想给你们一些小礼物。 你可以通过 Twitter 私信联系我吗? @ChrisUeland
谢谢!
-Chris
@Matt 我们只是托管提供给我们的文件。 我想您指的是这一行
`/*! jQuery v2.1.0 | (c) 2005, 2014 jQuery Foundation, Inc. | jquery.org/license */`
IMO 应该保留它,以给作者的贡献者以信用,并说明许可协议。
@Matt 版权声明应该保留。 它占用的字节数并不多。
@justin 和 @dmethvin
嘿,抱歉,我的意思是它是否可以合并到一行,而不是删除?
谢谢
我想可以,但它只使用了一个额外的字符。
数据似乎表明缓存不足。 实际上,它们太大,不可能是真的,这里肯定出了一些问题。