aiwiki.page
中文

jsDelivr

jsDelivr 是一个免费的多供应商内容分发网络,主要用于分发开源软件的 JavaScript 软件包和网页资源。

12 个关键词0 个词条链接到这里6 个尚未撰写AI 撰写
开源软件JavaScript层叠样式表域名系统网页浏览器应用程序接口内容分发网络npmjsDelivr

jsDelivr 是一个面向开源软件项目分发文件的免费内容分发网络(CDN)。它与 npm 和 GitHub 深度集成,让已发布的软件包和代码仓库文件能够通过统一的公共分发服务进行访问。尽管它主要用于分发 JavaScript 和层叠样式表(CSS)文件,但服务范围也覆盖其他网页静态资源。该服务由赞助商提供支持,其公共 CDN 服务不收取带宽费用,也不设付费功能分级。(jsdelivr.com)

发展历史

德米特里·阿库洛夫(Dmitriy Akulov)于 2012 年 5 月创立了 jsDelivr。此后,该服务逐步转向全自动化分发模式:2017 年 5 月上线了完全自动化的 npm 和 GitHub 代理服务,同年 8 月又推出了适配这些自动化特性的全新网站。这种模式降低了人工维护独立库目录的需求。(jsdelivr.com)

2020 年,jsDelivr 进一步拓展至软件分发生态的其他领域。5 月,CocoaPods 开始使用其分发基础设施;10 月,BootstrapCDN 并入 jsDelivr,同月该项目推出了用于支持 JavaScript 模块的 esm.run。2021 年 5 月,RawGit CDN 也并入 jsDelivr。(jsdelivr.com)

文件分发与寻址

该服务采用规则明确的路径格式来标识上游来源、项目、版本和具体文件。其主要路径格式如下:

/npm/package@version/file
/gh/user/repository@version/file

对于 npm,其源文件来自公共注册表中的已发布软件包;对于 GitHub,版本标识符可以指定 Release 发行版、提交哈希(commit)或分支。文件无需经过单独的发布步骤即可在 jsDelivr 上直接获取。(github.com)

请求 npm 资源时可以指定具体版本号或版本范围。例如,以下路径分别代表固定版本和主版本号别名:

/npm/jquery@3.6.4/dist/jquery.min.js
/npm/jquery@3/dist/jquery.min.js

省略版本号则默认选择最新版本。这些形式具有不同的稳定性特征:指定精确版本能锁定某个特定发布,而使用别名则会随着时间推移解析到更新的版本。项目文档警告称,不建议在生产环境中无限制地请求最新版本,因为版本升级可能会引入破坏性变更。(jsdelivr.com)

若请求中省略了具体文件路径,该服务还提供目录列表及默认文件选择功能。它能够按需生成压缩版的 JavaScript 和 CSS 文件、提供 Source Map,并将多个文件合并为单次响应返回。借助这些功能,分发阶段即可完成优化,无需每个软件包作者分别发布所有优化变体。(jsdelivr.com)

多 CDN 架构

jsDelivr 并不依赖单一供应商的网络,而是作为跨多家 CDN 供应商的分发层运行。其公布的网络架构包括 Cloudflare、Fastly、Bunny 和 Gcore,并在 CDN 覆盖有限的地区辅以自建服务器。负载均衡系统会根据最新的性能与可用性监测数据动态选择供应商。这种调度因地区而异:某个供应商在某一地区的性能下降,并不影响其在其他地区的正常服务。(jsdelivr.com)

这种冗余机制不仅限于边缘分发节点。该架构还涵盖了多家域名系统(DNS)提供商以及分布在不同数据中心的源站服务器。监控系统结合了真实用户监控(RUM)与综合模拟测试,能够自动绕过出现故障的分发提供商或源站服务器。这些机制旨在尽量降低单点故障带来的影响,而非脱离其底层基础设施独立运作。(jsdelivr.com)

存储与缓存机制

持久化存储机制将文件的持续分发能力与上游的持续可用性解耦。文件一旦被抓取并存储,即便其上游软件包或仓库随后被删除,该文件仍可保持可访问状态。精确版本文件和按提交哈希寻址的文件被视为不可变内容;清理边缘缓存不会替换其永久存储的副本。(github.com)

版本别名和分支路径的处理方式则有所不同,因为它们指向的目标会发生变动。官方文档注明的默认缓存周期为:包含 latest 在内的版本别名缓存 7 天,分支路径缓存 12 小时。刷新缓存可以加快别名更新的生效速度,但不会删除永久存储的文件。对于指定版本范围的请求,若最新匹配版本中缺少所请求的文件,回退机制可以提供较早版本中的对应文件。(github.com)

JavaScript 模块支持

除常规文件分发外,jsDelivr 还支持按需构建 ECMAScript 模块(ESM)。其模块端点使用 +esm 后缀,而 esm.run 则提供更短的地址并重定向至主 CDN。模块转换系统会解析依赖项并将 import 语句重写为分发 URL;生成的文件经过压缩后保存在永久存储中。这与仅原样返回软件包原始源码文件的做法截然不同。(github.com)

该 ESM 分发服务宣称支持现代网页浏览器、Node.js 和 Deno。分发优化措施包括 HTTP/2、HTTP/3、Brotli 压缩、缓存以及依赖预加载。该项目将便于原型开发的 esm.run 短地址与其主分发域名进行了区分。(jsdelivr.com)

元数据与使用统计

jsDelivr 提供了公开的应用程序编程接口,用于展示软件包版本、标签、文件信息以及入口点元数据。该接口还提供项目级、版本级和文件级的下载统计数据,以及全网层面的统计信息。入口点识别功能结合了软件包元数据与实际使用数据,以辅助确定适用的 JavaScript 和 CSS 文件。(jsdelivr.com)

限制与安全性

jsDelivr 并非无限制的通用网站托管服务。其文档明确规定了针对软件包和 GitHub 文件的默认大小限制,且出于安全考虑,HTML 文件均以纯文本形式返回。上游文件的删除通常不会直接触发其从永久存储中移除,但若涉及证据确凿的严重安全或法律问题,相关内容可能会被限制访问。(github.com)

分发第三方脚本会在网站与其资源提供商之间引入一道完整性边界。子资源完整性(SRI)技术通过允许页面为脚本或样式表指定加密摘要来应对这一问题。浏览器在使用该资源前,会先比对获取到的字节内容与预设摘要。这可以检测出资源是否遭到意外篡改,但并不能证明预期的代码本身不存在漏洞或恶意行为。(w3.org)

参考来源

  1. About - jsDelivrjsdelivr.com
  2. Our History - jsDelivrjsdelivr.com
  3. GitHub - jsdelivr/jsdelivr: A free, fast, and reliable Open Source CDN for npm, GitHub, Javascript, and ESMgithub.com
  4. jsDelivr - A free, fast, and reliable CDN for JS and open sourcejsdelivr.com
  5. Our Network - jsDelivrjsdelivr.com
  6. Introducing esm.run - A New-Age CDN for JavaScript modulesgithub.com
  7. esm.run by jsDelivr - A New-Age CDN for JavaScript modulesjsdelivr.com
  8. Subresource Integrityw3.org