V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
kkocdko
V2EX  ›  分享创造

在 2023 年评测前端静态资源公共 CDN

  •  
  •   kkocdko ·
    kkocdko · 2023-06-12 04:11:01 +08:00 · 2833 次点击
    这是一个创建于 523 天前的主题,其中的信息可能已经有所发展或是发生改变。

    本文原始链接(本人博客): https://kkocdko.site/post/202306120230

    当下前端工程化后,大家都把东西塞进 Bundle 了,曾经很重要的“前端静态资源公共 CDN”也似乎即将成为时代的眼泪。然而对于一些写 Demo 之类的需求,它们还是有点用的,再加上目前互联网上对静态资源公共 CDN 的评测文章大多过时,于是我测试并总结了一下。本次测试使用 curl 和 hyperfine 并切换多个代理节点(是的我知道这不精确)。

    TLDR: 境外 jsDelivr / UNPKG 任选,境内推荐 npmmirror ,境内外都有需求建议 npmmirror 但不完美。如使用特别流行的库,也可使用 cdnjs 或其他国内 CDN 。

    前端公共 CDN 目前大致分两类,一类是 cdnjs 这种需提交审核的,另一类是 jsDelivr 这种镜像 NPM 的。前一类的代表自然是 Cloudflare cdnjs ,或者 Google 的 CDN 。国内此类 CDN 通常以 cdnjs 为上游进行同步。BootCDN 曾经很流行,但曾有多次事故,恐怕用起来还需谨慎。

    后一类是本文重点,许多时候我们写的 Demo 所需的库并未被 cdnjs 收录,提交审核又太费时费力,所以我偏好使用直接镜像 NPM 的公共 CDN

    分别是 npmmirror (淘宝 NPM 镜像),饿了么 UNPKG CDN ,UNPKG ,jsDelivr 。我们的测试命令:

    testonce(){ ./hyperfine -w 2 -r 10 -p "sleep 1" -u millisecond "curl $1 >/dev/null" ;}
    testonce https://registry.npmmirror.com/@fontsource/noto-serif-sc/5.0.3/files/files/noto-serif-sc-chinese-simplified-400-normal.woff2
    testonce https://npm.elemecdn.com/@fontsource/[email protected]/files/noto-serif-sc-chinese-simplified-400-normal.woff2
    testonce https://unpkg.com/@fontsource/[email protected]/files/noto-serif-sc-chinese-simplified-400-normal.woff2
    testonce https://cdn.jsdelivr.net/npm/@fontsource/[email protected]/files/noto-serif-sc-chinese-simplified-400-normal.woff2
    

    测试结果篇幅太长,感兴趣可以到原文地址看。顺便我在移动 4G 测试 jsDelivr 始终 Reset ,像是个墙中墙。

    总结:jsDelivr 曾经是完美的选择,但自从证书吊销事件后在大陆地区的访问就不是很正常; UNPKG 表现一般,至少都能用; npmmirror 在境外也有节点,虽然不如 jsDelivr 那么多,但是均衡的选择;饿了么 CDN 仅适合无境外访问需求的场景。

    6 条回复    2023-06-12 13:15:29 +08:00
    kkocdko
        1
    kkocdko  
    OP
       2023-06-12 04:35:36 +08:00
    不知道 V2EX 的 Markdown 是否支持直接使用 <details> 标签,要是支持的话以后直接把数据折叠起来。
    JensenQian
        2
    JensenQian  
       2023-06-12 05:46:26 +08:00 via Android   ❤️ 1
    怀念以前 jsdelivr 有国内节点时候
    atan
        3
    atan  
       2023-06-12 08:58:49 +08:00   ❤️ 1
    国内应该用 fastly.jsdelivr.net 测试结果会好很多吧,另外你这个只是速度测试,jsdelivr 还有 minify 和 combine 等加成,目前其他没看到有哪家有这些功能
    LandCruiser
        4
    LandCruiser  
       2023-06-12 09:17:24 +08:00   ❤️ 1
    现在不赚钱,只有还在用软件,app 盈利的大厂会在意性能,加载时间这些东西。
    subframe75361
        5
    subframe75361  
       2023-06-12 09:53:36 +08:00   ❤️ 1
    试试 esm.sh
    kkocdko
        6
    kkocdko  
    OP
       2023-06-12 13:15:29 +08:00
    @subframe75361 esm.sh 也不错,不过我并没有特别迫切的使用 es module 的需求。jsDelivr 也提供了 esm.run
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2657 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 126ms · UTC 10:26 · PVG 18:26 · LAX 02:26 · JFK 05:26
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.