这是Dmitriy Akulov及其项目jsDelivr的客座文章。- 编辑注。
作为开发者,你可能已经了解了Google 托管库。Google 提供了一种简单快捷的方式,让你可以将 12 个最受欢迎的 js 库包含到你的网站中。
但是,如果你是一名网站管理员,并且想利用快速 CDN 来使用其他不太受欢迎的项目呢?或者,如果你是一名开发者,并且希望让你的项目更容易被其他用户访问和使用呢?
这就是jsDelivr发挥作用的地方。jsDelivr 是一个免费的开源 CDN,旨在帮助开发者和网站管理员。它没有受欢迎程度限制,并且允许各种类型的文件,包括 JavaScript 库、jQuery 插件、CSS 框架、字体等等。
添加库
要添加新库或更新现有库,开发者只需克隆我们的 Github 仓库,并应用他们认为合适的修改。审核员审核 Pull Request 并合并后,文件将立即从官方网站提供。
如果审核员在线,审批时间不应超过 20 分钟,否则可能需要长达 10 个小时,直到有人上线。但是,一旦我们的自动更新工具上线,审核时间将会缩短。
可靠性
但是什么让它如此先进呢?jsDelivr 的想法不是创建另一个公共 CDN,而是提供一个超快速且可靠的基础设施,让开发者和网站所有者可以信赖并使用。任何大型或小型网站都可以使用它,无需担心。没有带宽限制,我们的服务非常可靠。
我们无法容忍缓慢的响应、超时和停机,因此我们设计了一个独特的系统来克服这些问题,并提供一项产品,即使是企业级 CDN 也会感到羡慕。正常运行时间和性能是我们的首要任务,我们始终监控一切,并且始终关注可能进一步改进我们 CDN 的新技术和提供商。
基础设施
与竞争对手不同,jsDelivr 使用独特的 Multi-CDN 基础设施来提供最佳的正常运行时间和性能。它的主要骨干建立在由MaxCDN 和CloudFlare提供的 CDN 网络之上。
我们还在 CDN 存在很少或根本不存在的地方使用定制服务器。目前,这总共产生了 42 个全球 POP 位置。未来,我们计划添加更多位置,以即使在不太受欢迎的国家也能提供最佳性能。
当然,如果不能正确地跨多个位置进行负载均衡,那么很多位置就毫无意义。对于负载均衡系统,我们使用由Cedexis提供的服务。他们的主要功能之一是他们收集所有主要 CDN 提供商的实时性能数据。每天处理并提供给所有 Cedexis 用户 13 亿次 RUM(真实用户指标)性能测试。
衡量性能
为了收集这些 RUM 测试,他们已在数千个网站上部署了特殊的 JavaScript 代码。访问这些网站的每位访客都会执行此代码,并在浏览网站时在后台开始测试不同的 CDN 提供商。测试不会以任何方式影响浏览体验,对用户来说是完全透明的。你实际上可以通过访问我们的网站 并打开开发者工具到“网络”选项卡来查看它是如何工作的。
这些测试的妙处在于它们不是人工合成的。它们反映了真实用户从这些 CDN 中下载文件时将获得的实际性能。
然后会存储以下信息
- 我们每个提供商的性能指标。
- 我们每个提供商的可用性指标。
- 浏览器的用户代理
- 用户的 IP 地址的前三个八位字节
现在,我们拥有所有这些信息,就可以将其用于我们的智能负载均衡算法。
每个用户都会收到一个基于其位置和 ISP 提供商的唯一响应。每次用户请求从 jsDelivr 下载文件时,我们的算法都会提取其在过去几分钟内可用的性能和可用性数据,然后确定最适合该特定用户和该特定时间的最佳提供商。所有这些都在几毫秒内完成。
首先,它会确保所有可用的提供商都在线。为此,它使用 RUM 可用性数据和每分钟检查每个提供商正常运行时间的合成测试。然后,它会按用户的 ISP 及其位置的性能对提供商进行排序。
一旦它获得了最快的提供商,它就会将主机名返回给用户。因此,例如,伦敦的两名具有不同 ISP 的用户可能会收到两个不同的响应,因为他们的 ISP 对不同的 CDN 提供商具有不同的路由和性能。这个智能系统确保所有用户都能获得最大的正常运行时间和快速的加载时间。如果提供商出现故障,jsDelivr 不会出现任何问题,并将立即开始使用不同的提供商进行服务。
该算法还会立即响应性能下降。例如,一个 CDN 提供商在欧洲遭到 DDoS 攻击,他们的响应时间增加,jsDelivr 会发现这一变化,并且只是停止在欧洲使用此提供商,但仍会将其考虑用于不受攻击影响的美国和其他位置的用户。
不要依赖单个 CDN 来保证正常运行时间和速度。任何事情都有可能发生故障,但两个 CDN 和多个服务器同时发生故障的可能性非常小。这就是为什么 jsDelivr 是所有网站最优解决方案的原因。无论网站有多大。
我还应该指出,MaxCDN、CloudFlare、Cedexis 和其他公司免费赞助 jsDelivr。很高兴看到有些公司愿意帮助开源项目,并建设一个快速且免费的互联网。
高级功能
jsDelivr 还支持一些有趣且非常有用的功能,例如
版本别名
与其为每个版本使用唯一的 URL 来加载 jsDelivr 的项目,不如使用别名。例如,以 Abaaso 项目为例。目前,最新版本为 3.10.50,你可以像往常一样在 URL 中指定确切的版本来加载它。但是,由于该项目经常更新,你很快就会开始使用旧版本。为了解决这个问题,你现在只需使用以下 URL
//cdn.jsdelivr.net.cn/abaaso/3.10/abaaso.min.js
通过使用 3.10,你告诉 jsDelivr 加载它在 3.10 分支中拥有的最新版本,在本例中为 3.10.50。对于大多数作者来说,这是最佳解决方案,因为他们可以加载最新的次要版本,而无需担心可能会破坏其网站的主要更改。
当然,也可以使用以下 URL 加载 v3 分支中的最新版本
//cdn.jsdelivr.net.cn/abaaso/3/abaaso.min.js
如果出于任何原因,你需要始终加载任何主要分支中可用的最新版本,可以使用
//cdn.jsdelivr.net.cn/abaaso/latest/abaaso.min.js
通过使用latest
版本,你告诉服务器加载它拥有的绝对最新版本。当然,这很危险,而且随着时间的推移,可能会破坏你的网站。因此,请谨慎使用此功能。
使用单个 HTTP 请求加载多个文件
jsDelivr 是第一个支持此类功能的 CDN。你可以使用单个 HTTP 请求加载多个文件。类似于在自己的服务器上组合和压缩 js 文件,但由 jsDelivr 的庞大而智能的网络进行缓存。
你只需使用你想要组合的项目和文件以及它们的版本(如果需要)构建自己的 URL。例如,要加载 abaaso、ace 和 alloyui 项目的最新版本,可以使用以下语法
//cdn.jsdelivr.net.cn/g/abaaso,ace,alloyui
请注意,加载最新版本并不推荐,并且随着时间的推移,可能会破坏你的网站。因此,你应该指定确切的版本或使用版本别名
//cdn.jsdelivr.net.cn/g/jquery@2.1,angularjs@1.2
因此,jquery@2.1 将加载 2.1.0,angularjs@1.2 将加载 1.2.14。但是,上面的 URL 将加载每个项目的主文件,而不会加载其他任何内容。
如果你想要加载来自单个项目的多个文件,则可以执行以下操作
//cdn.jsdelivr.net.cn/g/jquery@2.1,angularjs@1.2.14(angular.min.js+angular-resource.min.js+angular-animate.min.js+angular-cookies.min.js+angular-route.min.js+angular-sanitize.min.js)
如果你想要加载 CSS,则使用上述格式选择 css 文件。如果组 URL 中的所有文件都具有 .css 扩展名,则服务器将自动以Content-Type: text/css
HTTP 标头进行响应。在所有其他情况下(对于 /g/ URL),将使用Content-Type: application/javascript
。
接下来,你只需将 URL 包含在你的网站中,即可完成。更少的 DNS 解析、更少的 TCP 连接、更少的 HTTP 请求 = 更快的网站。
你甚至可以使用此功能为用户提供一个生成器,让他们能够生成包含所需模块的 URL,然后使用快速 CDN 加载所有模块。
真正的 API
jsDelivr 具有功能齐全的 API,开发者可以在其网站中使用它来创建自定义模块,以及你可能想到的任何其他内容 https://github.com/jsdelivr/api
你可以使用我们的 API 请求你需要的任何内容,而无需下载巨大的 package json。它还支持 cdnjs 和 Google。这样,开发者就拥有了构建应用程序所需的一切。
自动更新
jsDelivr libgrabber 是一种将在我们的服务器上运行的工具,如果配置了它,可以自动更新所有托管的项目。最棒的是,作者无需更改其仓库中的任何内容。所有更改都在 jsDelivr 端进行。
你只需在要让 jsDelivr 仓库中自动更新的项目中创建一个 update.json 文件,并在其中添加一些基本信息即可。该文件还支持用于新版本的多个来源,例如 npm、bower 和直接 Github 仓库。该文件仍在开发中,但计划很快发布。
试一试,伸出援助之手!
jsDelivr 是一个非常有趣的项目,我乐于开发它并使其变得更好。它也极大地依赖于社区的帮助。考虑在你的网站中使用它,并在那里托管你的项目。
如果你有兴趣提供帮助,我们随时欢迎你加入,只需加入Github上的讨论即可。
请随时发表评论,并提出你可能遇到的任何问题。
谢谢
关于 Dmitriy Akulov
系统管理员。热爱技术、高性能和快速 Web。有时假装是开发者。为 MaxCDN 工作。
关于 Robert Nyman [名誉编辑]
Mozilla Hacks 的技术布道者和编辑。关于 HTML5、JavaScript 和开放网络的演讲和博客。Robert 是 HTML5 和开放网络的坚定支持者,自 1999 年以来一直从事网络前端开发,在瑞典和纽约市都有工作经验。他经常在 http://robertnyman.com 上发布博客,喜欢旅行和结识新朋友。
37 条评论