之前在 V2EX 上看到這篇「用程序猿視野看公共 CDN」,感覺寫的不僅不詳細,還有很多紕漏和錯誤。可是嘲笑別人寫得不好,總得自己寫篇更好的才行嘛,所以我就寫了這篇對公共 CDN 的評測。
達成成就:360 奇舞團的怡紅公子,還有獸獸都來留言惹(都是大佬耶~ 嗚哇~)
參與評測的公共 CDN 服務商
首先,入選的公共 CDN 都必須是積極更新、積極維護的,意味着新浪、百度、又拍 JSCDN 之流是不參與評測的。
BootCSS 國內最著名、使用最廣泛的公共 CDN 之一- css.loli.net 由土豪獸獸維護的公共 CDN,
css.net
的船新升級版本 - Staticfile 由七牛維護的公共 CDN 服務
- 75CDN 由 360 的奇舞團運營的公共 CDN
- 今日頭條公共 CDN
- jsDelivr 由 Prospect One 運營,非常快速和非常可靠的公共 CDN
- CDNJS 非常著名的公共 CDN,國內大部分公共 CDN 都是和它維護的庫同步
- Unpkg 著名的公共 CDN,從 NPM 抓取 Package 中的文件
- Bootstrap CDN Bootstrap 官方推薦的公共 CDN
評測角度
- HTTPS 和 HTTP2
- 服務商 直接關係到公共 CDN 的質量和 SLA
- 節點數量和質量 關係到終端用戶的速度
海外的公共 CDN 服務商和中國的公共 CDN 服務商的評判方法不同,中國的從 國內節點 和 海外節點 來衡量,海外的從 全球節點 和 中國節點 來衡量
- 加載速度 從國內和海外兩個部分衡量
- 服務域名和使用的權威 DNS 決定了公共 CDN 的 SLA 和解析速度
公共 CDN 由於頻繁調用,解析結果絕大部分都會被遞歸 DNS 緩存,解析速度受權威 DNS 影響不大;但是通過使用的權威 DNS 也可以看出公共 CDN 服務商的投入多少
- 便捷性 是否方便開發者使用
比如是否提供 Lib 庫搜索、是否支持一鍵複製 URL 或者標籤
注意,本文不會提供類似 ping 速度或者 IP 數量這類數據,因爲這些並不是衡量公共 CDN 的標準。
BootCDN
官網
- 支持 HTTPS,支持 HTTP2
- 京東雲 CDN
- 豐富的國內節點
- 沒有海外節點
- 在國內速度還不錯,海外的話不敢苟同
cdn.bootcss.com
,使用 DNSPod 免費版- 便捷性:★★★★★
開放 API;提供搜索引擎索引;支持一鍵複製標籤和 URL
BootCDN 是國內使用最廣泛的公共 CDN。BootCDN 之前和又拍雲合作。雖然又拍雲與其他 CDN 相比有些亮點(WebP 和 H264 自適應、TLS1.3 等),但節點質量實在不敢恭維,海外也只有香港、新加坡、北美、荷蘭四個節點(法蘭克福被去掉了)。BootCDN 的官方博客還 記錄了一次事故,大意是 CC 攻擊使得又拍雲封禁了不少 BootCDN 的 URL。
不知道是又拍不再贊助、還是服務質量不能滿足需要,BootCDN 今年切換到了京東雲 CDN。京東雲 CDN 在國內的節點還算數量豐富、覆蓋範圍也比又拍雲好;但是京東雲沒分配海外節點給 BootCDN,海外會解析到上海電信節點。
關於 BootCDN 使用 DNSPod 免費版,我個人覺得作爲國內使用如此廣泛的公共 CDN 用免費版的 DNSPod,畢竟不能保障 SLA;但是話說回來,公共 CDN 畢竟也是免費服務,還是別多嘴了。
毫無徵兆地,中國最著名的公共 CDN 服務提供商 BootCDN 於 2018 年 10 月 1 日停止了服務。
css.loli.net
官網
- 支持 HTTPS,支持 HTTP2
- 國內使用阿里雲 CDN,海外使用 Cloudflare(Pro Plan)
- 非常豐富的國內節點
- 豐富的海外節點
- 全球速度都很好
*.loli.net
,自建權威 DNS- 便捷性:★★
不支持一鍵複製;至於搜索,可以在
https://cdnjs.loli.net/ajax/libs/
用 Ctrl / Coomand + F;
css.loli.net 除了同步 cdnjs 的庫,還提供 Google Fonts 和 Gravatar 等服務的反代。
css.loli.net 的前身是獸獸的 css.net
,後來獸獸改用 cat.net
幾個子域名,直到現在的 loli.net
;使用了阿里雲 CDN + Cloudflare Pro Plan,全球速度都不錯(雖然 Cloudflare 錢不加夠是不會分配全部 150 節點的,但是 Pro 已經可以覆蓋大部分地區了)。至於自建 DNS,獸獸曾透露過他們每天解析請求多達數十億,一般的 DNS 服務商不划算。
說到便捷性,css.loli.net 只是提供加速服務,並沒有提供類似搜索或者一鍵複製的功能,而是讓開發者將現有的海外公共 CDN 的域名替換爲他們的服務域名;雖然數次更換域名難免造成一些不便,但是我依然主力推薦獸獸的公共 CDN 服務。
Staticfile
官網
- 支持 HTTPS,不一定 支持 HTTP2
- 著名的二手 CDN 販子七牛雲 CDN,上游說不準是哪個
- 豐富的國內節點
- 很可能沒有 海外節點
- 國內的速度還是不錯的
cdn.staticfile.org
,DNSPod 免費版
怎麼又是 DNSPod 免費版?
- 便捷性:★★★★
有搜索引擎,支持一鍵複製文件 URL
和別的公共 CDN 同步 CDNJS 的 Lib 庫不同,Staticfile 自己維護了一個 Lib 庫,曾經斷更過一年(那時候經常沒法用最新版本的庫),不過現在繼續維護了。
Staticfile 用的 CDN 是七牛。七牛的計費系統曾是 V2EX 工單板塊的常客,七牛的配置更新是用來衡量咕咕咕的單位,人們像買彩票一樣看七牛會分配哪個上游 CDN,至今坊間依然在流傳七牛人工向上遊服務商手動提交客戶的 SSL。當然我這篇文章並不是爲了黑七牛,所以趕緊言歸正傳。七牛之前給 Staticfile 分配了網宿,所以沒有 HTTP2 但是有海外節點,之後全面切換到又拍雲、有了 HTTP2 但是海外只剩一個法蘭克福,現在新分配了阿里雲 CDN 但是沒了海外節點,頗有些讓人哭笑不得。
即便如此,Staticfile 還算是不錯的公共庫,加上 Staticfile 誕生比 BootCDN 要早,所以在國內使用也非常廣泛。
75CDN
官網
- 支持 HTTPS,支持 HTTP2,提供 SRI(開啓 SRI 教程)
- 360 自家服務同款 CDN
- 豐富的國內節點
- 有幾個海外節點
- 國內的速度還是不錯的
lib.baomitu.com
,360 官網同款 DNS- 便捷性:★★★★★
有搜索引擎,支持一鍵複製文件 URL 和標籤
75CDN 是 360 前端團隊奇舞團維護的,除了同步 CDNJS 以外,還提供 Google Fonts 本土化(不是單純的反代)。75CDN 號稱首個支持 HTTP2 和 SRI 的公共 CDN(考慮到大前提是在國內的話,還是挺正確的),除此以外還率先支持 ES Module Import,走在了各大公共 CDN 前列。 從服務質量上來看,75CDN 使用的 360 自家服務同款 CDN 和權威 DNS,速度和 SLA 肯定不會低於 BootCDN 或者 Staticfile;但是海外節點目前就香港和北美,聊勝於無。
今日頭條公共 CDN
官網
- 支持 HTTPS,不一定 支持 HTTP2
- 著名的二手 CDN 販子七牛雲 CDN,上游說不準是哪個
- 豐富的國內節點
- 大量的 海外節點(s4 子域名除外)
- 全球的速度都不錯的
s1.pstatp.com
s2.pstatp.com
s3.pstatp.com
s4.pstatp.com
,DNSPod 免費版
怎麼還是 DNSPod 免費版?
- 便捷性:★★★★★
有搜索引擎,提供文件 URL,支持設置緩存響應頭時長
說實在的,其實今日頭條的公共 CDN(由母公司字節跳動的團隊負責運營)本來不應該入選評測的——上游同樣是 CDNJS,但是並沒有定時同步了,jquery
才更新到 3.2.1
,還大字寫了個什麼禁止非法網站調用啥的。但是之所以還要再補充關於它的說明主要是這個公共 CDN 非常有趣。
首先他不是直接給你直鏈,你點擊文件以後跳轉的鏈接是隨機分配的,可能是受到早期前端優化中域名分片的影響、以及間接實現在多家 CDN 之間的負載均衡吧。s1 域名接的是網宿 CDN,全球版,海外除了網宿自己的節點以外還有 cdnetworks 的節點;s2 和 s3 阿里雲 CDN 全球版,海外節點也很豐富的;只有 s4 域名接的是網宿國內版。除此以外還支持指定響應頭緩存時長(URL 中有參數)也非常有趣——明明公共庫文件都是長期不改變的,直接設置一年甚至兩年的 cache-control
就行了的。
雖然這個公共庫處於年久失修的狀態,但是考慮到它接的 CDN 上游都挺有趣的,還是可以考慮體驗一下的,但是如果要用於生產環境的話還是留個心眼比較好。
jsDelivr
官網
- 支持 HTTPS,支持 HTTP2,提供 SRI
- 網宿、Fastly、Stackpath、Cloudflare Business Plan
- 非常豐富的國內節點
- 非常豐富的海外節點
- 全球的速度都非常優秀
cdn.jsdelivr.net
,NS1 和 Rage4 主從 DNS- 便捷性:★★★★★
有搜索引擎,支持一鍵複製文件 URL 和標籤,支持分發 NPM、GitHub、WordPress SVN 的文件
如果有人讓我推薦公共 CDN,我一定會推薦 jsDelivr。通過 RUM 實時監測各地服務質量、調度多家 CDN 保障全球加載速度;擁有多層緩存和災備保障 100 SLA。更重要的是 jsDelivr 有 ICP 備案、接入網宿,很可能是海外公共 CDN 服務中唯一提供中國節點的。
jsDelivr 支持從 NPM、GitHub Tag 和 WordPress SVN 上抓取文件並分發,大大降低了開發者使用的難度——直接發個 Release 就可以用了。jsDelivr 每個月會被調用上百億次,服務 620+ TB 的流量,意味着如果你不是通過 jsDelivr 加載較爲熱門的庫,那麼緩存命中率是不會太理想的。
之前網宿的杭州節點遭到入侵,一干二手 CDN 都被 MITM,jsDelivr 也受到影響、不得不切走網宿,不過問題解決以後又切回來了。這也算是 jsDelivr 的一次事故吧,雖然鍋得網宿背;過了一年 jsDelivr 的 GSLB 服務商 Cedexis 又出現故障、不得不暫時將全部解析至 Cloudflare。但不管怎麼說,jsDelivr 總體上仍然是非常優秀、SLA 100、值得在生產環境上使用的公共 CDN。
CDNJS
官網
- 支持 HTTPS,支持 HTTP2,提供 SRI
- Cloudflare Enterprise Plan
- 沒有國內節點( cloudfalre.com 肯定不會備案,所以沒法啓用 China Access)
- 非常豐富的海外節點
- 國內的速度很不理想
- 海外的速度非常優秀
cdnjs.cloudflare.com
,Cloudflare 官網同款 DNS- 便捷性:★★★★
有搜索引擎,支持一鍵複製文件 URL 和標籤
與其說 CDNJS 是世界上最廣泛使用的公共 CDN 服務,或者去探討 Cloudflare 在海外的加速效果,還不如提一下 CDNJS 對其它公共 CDN 服務的貢獻——正如我在前面介紹的那樣,國內很多公共 CDN 服務都是在同步 CDNJS 維護的 Lib 庫。
CDNJS 的 CDN 由 Cloudflare 贊助,和 Cloudflare 官網同級別的(Enterprise Plan)服務。當然由於衆所周知的原因,肯定不推薦面向國內的站點使用這家公共 CDN。考慮一下自己站點訪客的主要來源,你會從 CDNJS 的幾個鏡像中挑選出符合需求的。
Unpkg
官網
- 支持 HTTPS,支持 HTTP2
- Cloudflare Free Plan
- 沒有國內節點
- 非常豐富的海外節點
- 國內的速度很不理想
- 海外的速度非常優秀
unpkg.com
,Cloudflare DNS- 便捷性:★★★
有搜索引擎,抓取並分發 NPM 包的文件
開源庫、開源框架如果在文檔的「Getting Started」中提到 CDN 的話,大多都會提一筆如何使用 Unpkg 加載。前身是 npmcdn.com
的 Unpkg 是最早分發 NPM 包的文件的公共 CDN,受到很多開發者的喜愛——Unpkg 可以很方便的直接使用指定版本的開源庫。
不過由於 Unpkg 也是使用的 Cloudflare,在國內的速度並不理想,所以開發者大多都是用 Unpkg 開發和測試,並不會用在生產環境部署。國內也有一些 Unpkg 的鏡像,但是我還是覺得 jsDelivr 更好用一些。
Bootstrap CDN
官網
- 支持 HTTPS,支持 HTTP2
- MaxCDN、Stackpath
- 沒有國內節點
- 豐富的海外節點
- 國內的速度不太理想
- 不錯的海外的速度
stackpath.bootstrapcdn.com
maxcdn.bootstrapcdn.com
,Route53 和 NS1 主從 DNS- 便捷性:★★★
支持一鍵複製文件 URL 和標籤
Bootstrap CDN 是 Bootstrap 官方推薦使用的公共 CDN 服務,因此雖然只提供 Bootstrap、Font Awesome 和 Bootswatch 三個庫的加速服務,但是使用人數衆多,每月流量消耗都已經達到 PB 級別。
之前 Bootstrap CDN 由 MaxCDN 贊助,後來 Stackpath 合併了 MaxCDN 以後繼續提供贊助;兩個域名都可以正常使用。國內速度雖然略好於 Cloudflare,但是依然不理想,所以面向國內的站點也不推薦取用 Bootstrap CDN。