jsDelivr - 开源CDN
一个全球超快速且面向生产的CDN,与NPM和GitHub紧密集成
支持即时优化、ES模块、详细下载统计等功能
网站仓库
·
公共API
·
博客
·
@jsDelivr
·
Discord
我们正在寻找贡献者。 如果你认为可以提供帮助,请查看上述仓库中的未解决问题,或者如果你有想讨论的想法,请提出新的问题。
jsDelivr是一个免费的开源文件CDN。我们与Github和npm紧密集成,能够自动为几乎所有开源项目提供可靠的CDN服务。
我们提供一个稳定的CDN,可以在拥有大量流量的热门网站上用于生产环境。 没有带宽限制或高级功能,完全免费使用。
它是如何工作的 - 一个简单的信息图
为什么选择jsDelivr?
适用于生产环境
我们的公共CDN专为在生产环境中使用而构建,即使是最大的网站也可以使用。一切都经过优化并不断改进,以为所有用户提供最大的速度和正常运行时间。性能始终受到监控,我们一直在寻找可能进一步改进我们CDN的新技术和提供商。宕机、超时或慢速响应都是不可接受的。
我们尽一切可能确保我们的CDN永远不会破坏任何网站,无论使用场景如何。如果通过我们的CDN可以获得文件,我们就假设它在生产中使用,并确保它无论如何都会继续工作。
这包括动态端点,如/npm/
、/gh/
和/combine/
。当首次访问文件时,它会永久存储在可靠的文件系统中。这意味着即使npm包被删除或开发人员删除了现有文件,jsDelivr也会继续提供存储的副本,永远不会破坏任何网站或造成任何问题。
除此之外,我们还进行版本回退。这意味着如果1.0.1版本中使用的文件在1.0.2版本中不再可用,而用户请求不存在的文件,我们会回退到之前的1.0.1版本并提供服务,而不是以404错误失败。
多CDN
与竞争对手不同,jsDelivr使用多个CDN提供商,从而实现最佳的正常运行时间和性能。我们目前使用CloudFlare和Fastly。
如果一个CDN宕机,使用jsDelivr的网站不会有任何问题,因为所有流量将立即重定向到剩余的运行中的提供商。
智能负载均衡
jsDelivr使用真实用户性能数据(也称为RUM)来做出路由决策。这些指标从数百个网站收集,并用于我们的负载均衡算法中,以做出准确的内容服务决策。
所有提供商(CDN和自定义服务器)每天都会被全球真实用户测试数百万次。基于这些信息,jsDelivr知道哪个提供商对每个用户来说是最快的。每个用户都会根据其位置、ISP和提供商的实时正常运行时间获得独特的响应。
该系统还能立即响应提供商的性能下降和宕机。如果一个CDN遭受DDoS攻击,其在某些地方的性能下降,算法会在几秒钟内察觉到变化,并开始为所有受影响的用户提供不同的提供商。
故障转移
我们有多层故障转移来保护我们的用户免受任何宕机影响。
我们同时使用两个DNS提供商。要使jsDelivr宕机,这两家公司必须同时宕机。
我们的两个DNS提供商都监控我们的负载均衡端点,如果检测到问题,它们会自动将所有流量切换到单个CDN提供商。
我们的负载均衡器使用RUM和合成数据监控所有CDN提供商的正常运行时间。如果检测到任何宕机或性能下降,该CDN提供商将立即被移除,不会对我们的用户产生任何影响。
我们的源站由不同数据中心的多台服务器组成。如果一台服务器宕机,CDN将自动切换到使用剩余的健康服务器。
总的来说,我们拥有最具弹性的系统之一,准备好被甚至是最大的公司用于生产环境。
中国
jsDelivr在靠近中国城市中心的多个位置,确保为所有中国用户提供低延迟和高性能。
使用文档
jsDelivr为npm、GitHub、WordPress插件提供镜像,并为具有特殊要求的其他几个项目提供自定义端点。如果我们的常规端点不适合您的用例,请告诉我们,我们会想办法解决!
如果您是包作者,请查看我们的包作者提示,以使使用您的包尽可能简单。
根端点始终是https://cdn.jsdelivr.net
npm
jsDelivr可以立即提供公共注册表中任何npm包的任何文件。 推送到npm的新版本也会立即通过我们的CDN提供。无需维护。
如果包、版本或文件从npm中删除,jsDelivr将继续从我们的永久存储中提供该文件,而不会破坏任何使用它的网站。
我们使用永久S3存储来确保即使npm宕机或作者删除了包,所有文件也能保持可用。文件仅在第一次或S3宕机时直接从npm获取。
加载npm上托管的任何项目:
/npm/package@version/file
加载确切版本:
/npm/jquery@3.1.0/dist/jquery.min.js
使用版本范围而不是确切版本:
/npm/jquery@3/dist/jquery.min.js
/npm/jquery@3.1/dist/jquery.min.js
注意
如果您使用此功能,而您请求的文件在包的最新版本中不可用,链接将继续工作,这要归功于我们的版本回退功能。我们将继续从包的旧版本提供文件,而不是以404错误失败。
按标签加载(不推荐用于生产环境):
/npm/jquery@beta/dist/jquery.min.js
完全省略版本或使用"latest"加载最新版本(不推荐用于生产环境):
/npm/jquery@latest/dist/jquery.min.js
/npm/jquery/dist/jquery.min.js
注意 请求最新版本(相对于"最新主版本"或"最新次版本")是危险的,因为主版本通常会带来破坏性变更。只有在您真正知道自己在做什么时才这样做。
在任何JS/CSS/SVG文件后添加".min"以获取压缩版本 - 如果不存在,我们将为您生成。所有生成的文件都带有源映射,可以在开发过程中轻松使用:
/npm/github-markdown-css@2.4.1/github-markdown.min.css
注意 压缩大文件可能需要几秒钟。但是,我们将所有生成的文件存储在永久存储中,因此这种延迟仅适用于前几个请求。
省略文件路径以获取默认文件。此文件始终是压缩的:
/npm/jquery@3.1.0
/npm/jquery@3
/npm/jquery
获取目录列表:
/npm/jquery@3.1.0/
/npm/jquery@3.1.0/dist/
GitHub
我们建议对支持npm的项目使用npm以获得更好的用户体验 - npm包可在我们的网站上搜索,包页面显示额外的有用信息,如描述和主页链接。
我们使用永久S3存储来确保即使GitHub宕机或作者删除了仓库或发布,所有文件也能保持可用。文件仅在第一次或S3宕机时直接从GitHub获取。
加载任何GitHub发布、提交或分支:
/gh/user/repo@version/file
加载确切版本:
/gh/jquery/jquery@3.1.0/dist/jquery.min.js
/gh/jquery/jquery@32b00373b3f42e5cdcb709df53f3b08b7184a944/dist/jquery.min.js
使用版本范围而不是确切版本(仅适用于有效的语义化版本):
/gh/jquery/jquery@3/dist/jquery.min.js
/gh/jquery/jquery@3.1/dist/jquery.min.js
注意 如果您使用此功能,而您请求的文件在最新发布中不可用,链接将继续工作,这要归功于我们的版本回退功能。我们将继续从旧发布中提供文件,而不是以404错误失败。
完全省略版本或使用"latest"加载最新版本(仅适用于有效的语义化版本):(不推荐用于生产环境)
如果没有标记的发布,则回退到master
分支。
/gh/jquery/jquery@latest/dist/jquery.min.js
/gh/jquery/jquery/dist/jquery.min.js
注意 请求最新版本(相对于"最新主版本"或"最新次版本")是危险的,因为主版本通常会带来破坏性变更。只有在您真正知道自己在做什么时才这样做。
在任何JS/CSS/SVG文件后添加".min"以获取压缩版本 - 如果不存在,我们将为您生成。所有生成的文件都带有源映射,可以在开发过程中轻松使用:
/gh/jquery/jquery@3.2.1/src/core.min.js
注意 压缩大文件可能需要几秒钟。但是,我们将所有生成的文件存储在永久存储中,因此这种延迟仅适用于前几个请求。
获取目录列表:
/gh/jquery/jquery@3.1.0/
/gh/jquery/jquery@3.1.0/dist/
组合多个文件
我们的组合端点允许您在一个请求中从npm和GitHub端点加载多个文件:
/combine/url1,url2,url3
适用于单个文件的所有功能(版本范围、压缩、主模块)在这里也适用。所有组合的文件都带有源映射,可以在开发过程中轻松使用。
示例:
/combine/gh/jquery/jquery@3.1/dist/jquery.min.js,gh/twbs/bootstrap@3.3/dist/js/bootstrap.min.js
/combine/npm/bootstrap@3.3/dist/css/bootstrap.min.css,npm/bootstrap@3.3/dist/css/bootstrap-theme.min.css
注意 合并大型/多个文件可能需要几秒钟的时间。然而,我们会将所有生成的文件存储在永久存储中,因此这种延迟仅适用于前几次请求。
发布包
npm上托管的所有包和GitHub上的标记版本在jsDelivr上都是自动可用的。如果你是包的作者,这里有一些提示可以使你的包尽可能容易使用:
- 使用semver进行版本控制(这是npm强制要求的,但GitHub不要求)
- 如果在
package.json
中列为main
的文件不是用于浏览器的,请设置browser
或jsdelivr
字段 - 如果你分发压缩的JS/CSS文件,也请包含这些文件的源映射
- 如果你不想提供压缩文件,没关系 - 我们会为你处理
在package.json中配置默认文件
对于托管在npm上的包,我们支持使用较短的URL提供"默认"文件。可以通过在package.json
中设置以下字段之一来配置默认文件,其中jsdelivr
具有最高优先级:
jsdelivr
browser
main
我们首先会尝试找到这里提供的文件的压缩版本(通过删除扩展名并查找相同的.min.js
文件)。如果找不到,我们将自己进行压缩。
请注意,你必须在值中包含文件扩展名,例如:
"main": "./index" // 这将不起作用
"main": "./index.js" // 这是正确的方式
对于同时有JS和CSS文件的项目,使用上述字段之一用于JS,使用style
字段用于CSS文件(示例)。
限制
- 默认情况下不支持大于150 MB的包或大于20 MB的单个文件(在GitHub的情况下)。我们建议尽可能从包中删除不需要的文件。如果你需要为你的包设置更高的限制,请在此仓库中开一个问题。
- 出于安全原因,HTML文件以
Content-Type: text/plain
提供。
WordPress
我们的WordPress端点适用于托管在WordPress.org插件目录和Wordpress.org主题目录中的插件和主题,并镜像了WordPress.org插件SVN仓库。
从WordPress.org插件SVN仓库加载任何插件:
/wp/project/tags/version/file
加载确切版本:
/wp/wp-slimstat/tags/4.6.5/wp-slimstat.js
加载最新版本(不建议用于生产环境):
/wp/wp-slimstat/trunk/wp-slimstat.js
从WordPress.org主题SVN仓库加载任何主题:
https://cdn.jsdelivr.net/wp/themes/project/version/file
加载文件的确切版本:
https://cdn.jsdelivr.net/wp/themes/twenty-eightteen/1.7/assets/js/html5.js
在任何JS/CSS文件后添加".min"以获取压缩版本 - 如果不存在,我们将为你生成。所有生成的文件都带有源映射,可以在开发过程中轻松使用:
https://cdn.jsdelivr.net/wp/themes/twenty-eightteen/1.7/assets/js/html5.min.js
缓存
我们的缓存逻辑和头信息针对生产使用进行了优化,适用于所有非自定义端点。
- 静态版本和提交哈希 - 实际上是永久的。缓存头设置为1年,但我们也在S3存储中永久缓存文件。因此,所有绕过CDN的未来请求都将命中我们的S3存储,没有选项或方法更新该文件的内容。
- 版本别名 - 7天。这也包括
latest
版本。它们在我们的CDN上缓存7天,可以使用我们的API清除缓存,以加快项目发布到用户的速度。 - 分支 - 12小时。
在某些情况下,可清除的文件可能会更快地更新,这是由于缓存命中率低或我们出于维护原因强制清除CDN。
即使使用动态URL,如版本别名,我们也使用永久S3缓存,这意味着一旦我们下载了你的标记文件,你就无法更新它们。如果你的最新版本中存在关键问题,最好的做法是用修复程序标记一个新的有效semver版本,并使用我们的清除API清除CDN URL。
清除缓存
jsDelivr有一个易于使用的API,用于从缓存中清除文件并强制文件更新。当你发布新版本并想强制更新所有使用版本别名的用户时,这很有用。
请注意:
- 它不适用于上面解释的静态文件。
- 必须使用有效的semver版本才能进行清除
- 所有用户都适用速率限制
为避免滥用,目前通过电子邮件请求(d@jsdelivr.com)授予清除访问权限。
自定义CDN托管
我们可以合作为你的项目设置自定义配置。这样,你可以完全控制你的文件,并能够利用jsDelivr的全部功能。
这种自定义托管可能适用于:
- 二进制托管。Windows可执行文件和zip文件。
- 经常更新的文件。
- 无法遵循jsDelivr文件结构的项目。
- 其他一些会让我们大吃一惊的用途。
只需发送电子邮件至d@jsdelivr.com,请求更多信息即可。
目前使用自定义配置的开源项目:
- webjars
- webpack webpackbin 和 codesandbox
- emojione.com
- hex.pm
隐私政策
cdn.jsdelivr.net
jsDelivr可能会使用有关下载文件的信息来构建每个项目和每个文件的下载统计信息。
jsDelivr不存储任何用户数据,也不以任何方式跟踪用户。
以下是我们CDN提供商的相关政策: