GitHub+jsDelivr 打造免费且速度理想的 OSS

封面:詩乃ちゃん(Pixiv ID:41399153)

灵感来源:利用jsDelivr白嫖全球超高速静态资源访问服务!(作者:皮皮凛)

jsDelivr 提供免费的开源 CDN 服务,支持加速来自 npm、GitHub 以及 WordPress 的资源。

于是我们 New 一个 GitHub repo,把 static source 丢进去,就得到了一个十分理想的 OSS。

官网的 Usage 如此写道:

// load any GitHub release, commit, or branch

// note: we recommend using npm for projects that support it

https://cdn.jsdelivr.net/gh/user/repo@version/file

// load jQuery v3.2.1

https://cdn.jsdelivr.net/gh/jquery/[email protected]/dist/jquery.min.js

// use a version range instead of a specific version

https://cdn.jsdelivr.net/gh/jquery/[email protected]/dist/jquery.min.js

https://cdn.jsdelivr.net/gh/jquery/jquery@3/dist/jquery.min.js

// omit the version completely to get the latest one

// you should NOT use this in production

https://cdn.jsdelivr.net/gh/jquery/jquery/dist/jquery.min.js

// add ".min" to any JS/CSS file to get a minified version

// if one doesn't exist, we'll generate it for you

https://cdn.jsdelivr.net/gh/jquery/[email protected]/src/core.min.js

// add / at the end to get a directory listing

https://cdn.jsdelivr.net/gh/jquery/jquery/

实际上,直接调用 https://cdn.jsdelivr.net/gh/user/repo@version/file 即可。

省略 version 的写法以及懒人专用 trick:https://cdn.jsdelivr.net/gh/user/repo/file https://cdn.jsdelivr.net/gh/user/repo@latest/file,尽管它们看起来是正常的,官方在 Usage 中特别说明 should NOT 在生产环境中使用这种调用方法,大概是 cache 不甚友好。速度经测试均在误差允许范围内。

值得注意的是,在使用 https://cdn.jsdelivr.net/gh/user/repo@version/file 时,tag 中的“v”可以省略,例如我的 Release 版本 tag 是 v1.0.0,访问时无论是写 @v1.0.0 还是 @1.0.0 均可正确获取文件。

个人认为 version 的调用方法较为优雅,大概也更加 cache 友好。更新时 Draft a new release 即可。

Update on 2020-01-31:经更加细致考证,删去之前的主观臆断内容,并补充如下。

根据官方说明,jsDelivr 使用一个 S3 storage 来储存 repo 中的内容,即使 GitHub 的服务临时挂掉,只要这个 S3 没挂,就仍然可以正常获取内容。(草我嫖了个 S3)

直接从 GitHub 拉取文件的时候是存在的,即首次访问,文件还没有被 cache 并塞进 S3 的时候(或者 S3 挂了的时候),知道了这个大概就明白 jsDelivr 为什么那么快了。

说明中提到:

Omit the version completely or use "latest" to load the latest one (not recommended for production usage)

这个『不推荐在产品中使用』是造成我之前犹豫的最主要原因,但是我们可以看到:

Requesting the latest version (as opposed to "latest major" or "latest minor") is dangerous because major versions usually come with breaking changes. Only do this if you really know what you are doing.

也就是说,不是速度影响大,是担心调用的库的最新版本有未经充分测试的新功能、或者还没写完的东西,毕竟 jsDelivr 绝大多数时间是作为一个 JS/CSS 的 CDN 来运作的,更多数的情况是调用托管在上面的库,而不是拿来当 OSS。但是我们现在 really know what we are doing,即简单地嫖 jsDelivr 的静态资源加速,那显然是不存在 breaking changes 这样的东西的(当然如果你非要 break 自己那么我也没有办法),所以我们可以直接用 https://cdn.jsdelivr.net/gh/user/repo/filehttps://cdn.jsdelivr.net/gh/user/repo@latest/file 来避免天天改版本号以及一堆版本号不一致的境况。

个人认为随便怎么调用都很优雅,主要是 jsDelivr 比较优雅,也非常 cache 友好。更新时 Draft a new release 即可。[heimu](承上启下)[/heimu]

还可以进行代码压缩,Usage 中有,不赘述。

jsDelivr 还提供一些别的小功能,比如:

就先 Mark 到这里吧。这篇文章我是一边听着 fripSide 的 final phase 一边完成的,果然我们的生活需要燃曲~

最后修改:2020 年 01 月 31 日 06 : 31 PM
欢迎投食喵 ~

发表评论

2 条评论

  1. 阿珏酱

  2. 演员

    可以上传视频么