网站明明搭在阿里云上,带宽也够,但用户一多就卡得像PPT?或者你盯着Lighthouse的分数,死活不明白为什么“首次内容渲染”总是掉链子?别急着骂后端,今天咱们聊点更实在的——国内CDN对Web Vitals的影响到底有多大。
先交代一下测试环境,我手上这台机器是腾讯云轻量服务器,2核4G,系统CentOS 7.9,装了Nginx,挂一个纯静态的HTML页面,带几张WebP图片和一段内联CSS,工具用的是WebPageTest(国内节点版)和自建的定时脚本,拉取Lighthouse API数据,测的是三大主流CDN:阿里云CDN、腾讯云CDN、网宿CDN,再加一个裸奔直连做基准对比,每个节点测3次取中位数,数据采集时间是某天下午2点到4点,非节假日,算比较典型的工作日时段。
你的网站慢,真的只是服务器的问题吗?
先说延迟,裸奔直连,北京到深圳的RTT大概38ms,这个算是挺不错的了,但上了CDN之后,情况就微妙了,阿里云CDN在华东节点(比如上海、杭州)的延迟几乎“贴地飞行”,只有12ms到15ms,因为它本地缓存做得确实凶,腾讯云CDN在华南节点(广州、深圳)表现类似,10ms出头,但切换到西北地区,比如兰州、乌鲁木齐,网宿CDN反而成了黑马——它在这两个地方的延迟只有23ms和28ms,而阿里云和腾讯云都飙升到了40ms以上,网宿的节点覆盖策略明显更“基层”,在某些二三线城市甚至比一线大厂还稳。
再来看下载速度,我那个页面大约2.3MB,包括图片和CSS,裸奔直连的全国平均下载时间是多少?4.7秒,对,你没看错,4.7秒,这个数字足够让跳出率飙升到60%以上,上了CDN之后,阿里云CDN平均降到1.2秒,腾讯云1.1秒,网宿1.4秒,有趣的是,在边缘节点上,阿里云和腾讯云几乎不分伯仲,但网宿在部分西部节点反而更快——乌鲁木齐节点,网宿下载时间0.9秒,阿里云1.3秒,腾讯云1.5秒,原因很简单:网宿在这些地区自建了不少机房,而阿里云和腾讯云更多是靠P2P或者远端回源,绕了一圈。
然后是缓存命中率,这个太关键了,Web Vitals里LCP(最大内容渲染)触发的时机,很大程度取决于资源是不是从缓存直接丢出来的,我设的缓存策略是“public, max-age=86400”,也就是24小时,结果呢?阿里云CDN的命中率最高,平均87%,腾讯云紧随其后85%,网宿81%,但要注意,网宿在动态内容加速上表现更好——如果页面里带了少量动态参数(比如一个URL里加了?user_id=123),网宿的命中率只掉到76%,而阿里云直接掉到68%,这说明网宿对“半静态”资源的处理机制更灵活,不会因为一个参数就把整个缓存打翻。
再说一个容易被忽略的点:TLS握手时间,我强制了HTTPS,用的是Let’s Encrypt证书,裸奔直连握手平均耗时280ms,这已经很慢了,阿里云CDN在华东节点能做到90ms,腾讯云100ms,网宿120ms,但网宿在部分节点(比如合肥、郑州)反而更快,80ms左右,这可能跟网宿的TLS会话复用机制有关,它似乎保留了一部分连接池,不像大厂那样每来一个新请求就重新握手。
最后说说FID(首次输入延迟),这个指标其实跟CDN关系不大,但跟资源加载顺序有关,我发现用了阿里云CDN后,FID平均低了20ms,因为它的静态资源加载节奏比较平滑,不会一下子压垮主线程,腾讯云在这一点上略差一点,偶尔会出现资源加载的“突发高峰”,导致FID跳到80ms以上,网宿表现中等,但稳定性最好,没出现极端波动。
总结一下吧,不吹不黑,如果你的用户主要在华东华南,阿里云和腾讯云闭着眼睛选,差距微乎其微,但如果你的用户分布在西北、西南,或者你做的半静态、半动态的内容(比如带了URL参数、cookie校验),网宿反而是更稳妥的选择,它可以让你在某些节点的LCP直接砍半,至于预算?网宿在国内CDN里算中间档,比阿里云便宜一点,比腾讯云贵一些,但性价比确实高。
最后说一句:Web Vitals这事,七分靠CDN,三分靠代码,你代码写得再漂亮,回源慢了,一切都白搭,别光盯着自己服务器那一亩三分地,把CDN纳入KPI考核,你会发现“用户说慢”这个老大难问题,解决办法可能很简单。



发表评论