一个偶然的机会,看到某个博客使用了cdn.jsdelivr.net来存放图片,我心想:这哪里的CDN,能有AGA快吗?ping了一下,发现竟然是国内节点...打开F12看加载速度,还蛮快。

于是我折腾了一天,把博客和图床的静态文件全部搬到Github后,用jsDelivr加速。

先说结论:小站别用,大站可以用。小文件可以用,大文件别用。

首次访问某个文件时,jsDelivr访问Github,将文件下载到AWS S3,再将文件缓存到jsDelivr的新西兰/德国节点,再缓存到国内的网宿CDN节点,再走最佳POP点发送给用户。这么多的流程,这速度有多慢可想而知。

infographics.png

实测效果太糟糕了:首次加载时,在我的图床看个图片都要加载好几秒,甚至有些图片到了离奇的地步:有些2M左右的图片竟然用了接近两分钟才能加载好,有些甚至报504错误,然而用AGA/Azure香港直接秒开(测试宽带:广西电信/四川电信/辽宁联通 均为500Mbps)。

QQ截图20201129032140.jpg

首次加载大文件直接死亡:这一下AGA/Azure就把jsDelivr按在地上摩擦:

QQ截图20201129151048.jpg

QQ截图20201129151053.jpg

既然首次加载这么慢,那能不能先自己把所有文件访问一遍,缓存到国内,就一劳永逸了?所以我把博客静态文件用jsDelivr加速后,自己把博客的每篇文章都点一遍,然后再开无痕模式测速,确实比原来快了一些。于是我就把图床也用jsDelivr加速。然而事实是,就算缓存到了国内,小文件可能差别不大,但都是5M-20M的图片的话,AGA/Azure还是把jsDelivr按在地上摩擦:

QQ截图20201129151107.jpg

image.png

QQ截图20201129143304.jpg

QQ截图20201129143311.jpg

大家可以测一下这几张图。注意先开无痕模式,按F12,点击Network,再复制粘贴网址。

https://tu.shelike.me/images/2020/11/28/85925180_p0.png
https://cdn.jsdelivr.net/gh/vpswin1/hosting@master/tu/images/2020/11/28/85925180_p0.png

你可能会看到报错信息“Failed to fetch version info for xxxxx”,因为我把仓库删了。

每个地方的介绍都写

jsdelivr使用永久S3存储来确保所有文件可用,即使GitHub发生故障,或者作者删除了存储库或版本。仅当第一次或S3关闭时直接从GitHub获取文件。

想多了。

https://tu.shelike.me/images/2020/11/28/74886810MiniatureGarden.png
https://cdn.jsdelivr.net/.../images/2020/11/28/74886810MiniatureGarden.png

(注:受当地网络线路繁忙状况影响,也受当地网宿CDN节点质量影响,有时候测试结果会有出入。根据我对辽宁联通、四川、广西电信的多次测试,对于大文件,AGA/Azure都比已缓存到国内的jsDelivr要快。)
(别用各种测速网站测试。例如17ce,永远都是jsDelivr快,因为这个网站的最大下载文件的上限是1024KB,这一阶段可能AGA/Azure落后于jsDelivr,但后来AGA/Azure的下载速度一直在提升,并超过jsDelivr。然而17ce下载完1024KB时已经结束了测速,并得出错误的结论。)

并且,别以为你把博客的所有页面都访问一遍,缓存完成了就一劳永逸了。但事实是这东西有个冷却时间,一旦过了几个小时没人访问,马上从缓存中删除。当再有人访问时,jsDelivr又访问AWS S3提取源文件,又将文件缓存到jsDelivr的新西兰/德国节点,又缓存到国内的网宿节点,又走POP点才送到访客那。别问我怎么知道的,睡前把图床的每张图片都点过一遍,然后开无痕模式测速,速度挺快。一觉醒来回到解放前,哈哈。

那能不能写一个脚本,一直轮询访问每个文件,以达到缓存不清除的效果?闲得慌,也不是不可以,但是大文件即使缓存了,访问速度也非常慢。小文件确实有一定加速的效果,比如一些js、css、小图片。

从我的测试来看,jsDelivr并不适合做原图的图床。网上挺多文章写jsDelivr用来做图床。从测试结果来看,小图片可以,电信访问速度和AGA差不多,移动联通访问速度和Azure差不多。大图片或者原图,呵呵。

四川电信500Mbps,已缓存的小文件,jsDelivr VS AGA,AGA略胜一筹

QQ图片20201129163153_副本.png

辽宁联通500Mbps,已缓存的小文件jsDelivr VS Azure香港,jsDelivr完胜,但Azure香港也不差嘛,最大的差距只有0.2秒。

QQ图片20201129140651_副本.png

结论:小站别用,大站可以用。因为大站一直有人访问,缓存不会清除;而小站有得折腾。小文件可以用,有一定加速效果;大文件别用。

所以呢,有了AGA、Azure,基本上所向披靡,根本无需什么CDN。电信解析到AGA,移动联通解析到Azure,这应该是不备案的网站除了氪金的IPLC、香港CN2外最强的选择了。已备案的网站当然可以用国内服务器和其他国内CDN,应该会更快。