2026年了,请停止相信“公共 CDN 能提升性能”

简介: 注意,今天我们要讨论的是公共 CDN,而不是自建 CDN 或云厂商的 CDN。公共 CDN 已经没有缓存优势,对用户来说该加载数据量一点不会减少。早年公共 CDN 能提速的核心逻辑非常简单:用户访问过任意使用同款 CDN 资源的网站,本地就会缓存该库,再次访问你的网站可以直接命中缓存、零下载。但这套逻辑,在现代浏览器机制和前端生态下,早已荡然无存。第一,Chrome 86 正式启用浏览器缓存分区机制,Firefox、Safari 等主流浏览器也同步跟进。不同站点的缓存是被隔离的,用户仍然需要重新下载脚本,所以公共CDN的那点缓存优势早已过时。

注意,今天我们要讨论的是公共 CDN,而不是自建 CDN 或云厂商的 CDN。

公共 CDN 已经没有缓存优势,对用户来说该加载数据量一点不会减少。

早年公共 CDN 能提速的核心逻辑非常简单:用户访问过任意使用同款 CDN 资源的网站,本地就会缓存该库,再次访问你的网站可以直接命中缓存、零下载

但这套逻辑,在现代浏览器机制和前端生态下,早已荡然无存。

第一,Chrome 86 正式启用浏览器缓存分区机制,Firefox、Safari 等主流浏览器也同步跟进。不同站点的缓存是被隔离的,用户仍然需要重新下载脚本,所以公共CDN的那点缓存优势早已过时。

第二,即便退一步来说,用户使用 Chrome86 以下的老旧版本,现在已经不是千篇一律的jQuery时代了,现在是前端构建时代,要碰巧遇到之前访问过的网站刚好用了同供应商、同库、同版本、同格式的概率也比较低。

对用户来说,要加载数据量有可能更大

公共 CDN 提供的资源,都是固定全量打包产物。而现代前端工程最大的优势,就是可以基于业务场景做极致按需构建。进一步说,一切构建优化公共 CDN 都无法享用。

tree-shaking 项目中未使用的冗余代码、废弃逻辑,大幅精简资源体积。公共 CDN 的全量包包含库的全部功能代码,哪怕项目只用到 10% 能力,也需要加载 100% 的代码,冗余度极高。

打包 工程构建可将多个小型同类依赖合并为单个 chunk,减少请求数量;也可根据路由、功能拆分资源粒度,实现按需加载。公共 CDN 是固定打包产物,无法适配项目专属的合并、拆分策略。

依赖自身的构建开关 大量主流库提供了环境裁剪、功能开关的构建配置,可按需关闭无用模块、兼容代码。比如 Vue 的 __VUE_OPTIONS_API__。公共 CDN 为了适配全网所有场景,只能保留全部功能、开启全量兼容,无法做定制化裁剪。

按条件加载 现代前端工程可同时输出多份产物不同浏览器运行不同产物。比如业界常用 module/nomodule 实现条件加载。公共 CDN 大多只提供统一大包,要么产物臃肿,要么兼容性差。

自动 polfill 引入 一个优雅的构建过程,是会自动扫描依赖,然后注入特定polyfill的。但是外部依赖就无法扫描到了,要么就全局引入polyfill,要么只能人肉判断polyfill。

深层依赖预加载 在动态import时,现代前端工程能够同时请求深层依赖。使用公共 CDN,只有当前依赖请求完,才知道有哪些深层依赖。

公共 CDN 的网络真就比主站好吗?我看未必

公共 CDN 节点质量不可控、运营商链路不确定。弱网、跨国、小众地区可能比业务自研 CDN / 源站更慢。使用公共CDN还会带来额外的DNS解析、TLS握手、TCP连接建立、CORS校验等开销。

如果主站已经用了HTTP/2、3的多路复用,同域更能提升连接复用效率,进一步拉开差距。

就我个人平时的上网体验来看,打开慢的网站几乎都在用jsDelivr。

增加供应链风险

你的小网站可能黑客不感兴趣,但公共 CDN 可是黑客眼中的香饽饽。历史上,开源供应链攻击层出不穷,公共 CDN 极易面临劫持、篡改、停服、投毒风险。

为了防御,我们被迫使用 SRI (Subresource Integrity)

但 SRI 是把双刃剑。一旦 CDN 资源被篡改或者哈希不匹配,浏览器会直接拒绝加载。这就像是为了防止食物中毒,直接把所有外卖都倒进垃圾桶。用户结果是什么?页面白屏。

于是乎,为了用户体验,我们又要写“降级逻辑”:检测 CDN 挂了 -> 加载本地备用资源。

绕了一大圈,不仅代码变复杂了,用户还多走了一条无效的失败路径,速度反而更慢了。 这真是“捡了芝麻丢了西瓜”。

公共 CDN 和主站的 https 加密协议版本可能不同。

HTTPS 的加密协议在不断更新,但有一个核心矛盾:协议越安全,支持面越窄;支持面越广,越不安全。

当你的主站和公共 CDN 的 https 加密协议版本不同时,有可能你的主站支持的用户更广,公共 CDN 支持的用户更窄,导致主站正常,CDN 挂了,又要降级了哎。

更常见的是,公共 CDN 的域名不在用户的 HSTS 列表中。这等于是用户相信我们,但不相信别人,也会导致CDN 挂了。

首屏大小

绝大多数人使用公共 CDN 的方式,都是在首页直接通过 script 全局引入。这种模式本质上就是最原始的手动维护依赖方式,完全违背现代按需加载的工程理念。

如果是 jQuery 这类大概率首屏刚需的依赖,全局引入尚且可以接受。但如果是 lodash、工具类库、非核心组件库,大概率是页面二级、三级路由才会用到,或动态按需引入。

将非首屏依赖强行挂载到首页,会直接增大首屏资源体积、增加首屏请求数、阻塞页面渲染,白白拖慢首屏加载速度,完全得不偿失。

工程复杂度

如果在首屏,你可能通常这样写:

<script src="https://code.jquery.com/jquery-3.7.1.min.js"
    integrity="sha384-这是一个示例哈希,故意不匹配"
    crossorigin="anonymous"
></script>
<script>
if(!self.$) {
    
    document.write('<script src="/res/jquery.min.js"></script>');
}
// 上面代码虽然勉强实现降级,但是由于是同步加载,是牺牲性能的。
</script>

如果不在首屏的话,还要考虑失败降级、SRI、兼容性整个复杂度提升不是一点半点。这里我就不展开说了,展开文章就跑题了。我简单地列一个表格就能窥见其复杂度。

场景 处理方案
支持 type="importmap": integrity 使用importmap integrity
支持 top-level-await 和 script integrity 别名到一个虚拟模块,虚拟模块用 top-level-await 动态创建
不想使用构建技巧,就想使用原生import 基于原生import写模块化运行时,fetch拿数据,运行时校验integrity,运行时解析转化源代码,生成blob url,创建script module,里面使用import *
不支持top-level-await或原生import 使用传统模块化运行时

如果非要我做的话,我会选择使用top-level-await,不支持的用传统模块化运行时降级。

总结

公共 CDN 只适合在首屏依赖,工程化不足的情况。比如传统 jQuery 项目:全局引入、人肉babel,这就很适合公共 CDN。但凡工程化能力比较强,即便用jQuery也能按需构建玩出花。

题外话

如果是面试场景,主考官问到“如何优化前端性能”,我建议你还是用公共 CDN。这不妥妥的八股题吗?你要是说公共 CDN不好,岂不是打面试官的脸吗?

目录
相关文章
|
1天前
|
JSON 缓存 Shell
Codex Desktop 无法识别自定义模型的 5 种解决方法(2026 最新)
你接好了一个自定义 provider,codex 在终端里跑得好好的,但桌面版的模型选择器却像你的模型根本不存在一样。 这种落差几乎从来不是你的 API 密钥或配置语法出了问题,而是桌面版客户端悄悄过滤掉了后端已经加载好的模型。
|
2天前
|
弹性计算 应用服务中间件 Linux
阿里云Linux云服务器搭建Nginx:从零到生产级部署完全指南
本文提供了一份在阿里云Linux云服务器上从零搭建Nginx的完整实战指南。内容涵盖ECS实例的选型策略、安全组配置、SSH连接与系统初始化、Nginx的两种安装方式(包管理器与源码编译)、核心配置文件结构解析、虚拟主机与多站点配置、反向代理与负载均衡实战、HTTPS证书申请与部署、性能优化与安全加固、日志管理与监控,以及Systemd进程守护配置。文章提供大量可直接运行的命令与配置示例,帮助读者在阿里云ECS上快速构建一个高性能、安全可靠的Nginx Web服务环境,适用于个人博客、企业官网及API网关等多种场景。
|
2天前
|
存储 安全 开发工具
阿里云OSS防盗链与权限访问控制完全指南
本文系统讲解了阿里云OSS的防盗链与权限访问控制体系。首先深入剖析基于Referer的防盗链机制,包括白名单/黑名单配置、空Referer处理策略及QueryString截断规则,并提供控制台、Java SDK及ossutil三种配置方式。接着详细阐述OSS的四层权限控制架构:ACL提供基础的公开/私有控制,Bucket Policy实现基于资源的精细化授权(支持IP/VPC/时间条件),RAM Policy实现基于身份的跨账号权限管理,签名URL与STS临时凭证实现时效性访问控制。文章还深入分析了OSS扁平化存储结构对权限配置的影响、多策略并存时的鉴权流程(显式拒绝优先原则),并结合Pyth
|
27天前
|
前端开发 JavaScript API
一个案例教你彻底搞明白`AbortController` 、`AbortSignal`
今天这个案例,最硬核、最扎心、最真相、最干脆、最不墨迹、最不留情面、最一针见血、最开门见山、最单刀直入、最不铺垫、最不客套、最不煽情、最不废话、最不拐弯、最不磨叽、最不装、最不端着、最不啰嗦、最不拖沓、最不委婉、最不掩饰、最不藏着掖着、最直白、最彻底、最决绝、最了当。
117 1
|
13天前
|
人工智能 测试技术 Linux
DeepSeek V4-Pro接入Claude Code实操流程:从配置到测试的完整指南
DeepSeek V4-Pro作为具备百万级上下文窗口的高性能代码模型,在代码理解、复杂逻辑推理、长文件处理等方面表现突出,而Claude Code则是一款成熟的AI编程助手,拥有完善的命令行交互、斜杠命令、工具调用与项目管理能力。二者结合,能让开发者在保留Claude Code流畅使用体验的同时,获得DeepSeek V4-Pro强大的代码能力加持,实现开发效率的显著提升。
161 1
|
14天前
|
人工智能 监控 安全
阿里云千问大模型入门到精通:Qwen3.7系列能力、计费与落地实战详解
千问,官方名称通义千问,代号Qwen,是阿里云完全自主研发的全栈大模型家族,并非单一模型,而是覆盖纯文本、代码、图像、音频、视频、行业垂直场景的完整模型产品矩阵,统一依托阿里云百炼大模型服务平台对外提供能力调用、微调、智能体开发、知识库构建、应用部署等全链路服务。2026年主力迭代版本为Qwen3.7系列,相比前代产品大幅强化长上下文、自主智能体执行、多模态统一推理三大核心能力,原生适配国内中文语境、办公流程、企业业务规范,同时兼容国际主流接口标准,可无缝对接各类AI编程工具、智能体框架、业务系统。
1649 1
|
21天前
|
弹性计算 人工智能 安全
阿里云新用户选购云服务器热门活动参考:2026年云服务器相关活动内容介绍
2026年阿里云针对用户推出多项云服务器相关活动,降低上云成本。主要活动包括:一、轻量应用服务器限时抢购,2核2G配置仅38元/年(每日10点、15点限量),或68元/年直购,支持OpenClaw等AI镜像;二、"99计划"长效特惠,经济型e实例99元/年、通用算力u1实例199元/年,新购续费同价;三、u2i热门实例低至3折,第九代实例同步上线;四、新迁企业可申领5亿算力补贴;五、云产品组合购覆盖90%场景,如ECS 99上云套餐309元起、百元建站套餐84元起等。新用户完成实名认证后,建议领券并按需选择轻量服务器、长效ECS或组合套餐,实现高性价比上云。
|
13天前
|
存储 编解码 运维
2026年阿里云轻量应用服务器配置价格表与性能测评
阿里云轻量应用服务器是面向入门级用户、个人开发者及小微企业的一站式云服务产品,主打**开箱即用、极简运维、高性价比**,整合计算、存储、网络资源于一体,无需复杂配置即可快速部署应用。2026年产品全面升级,所有规格默认配备**200M峰值带宽+不限流量**,彻底告别流量焦虑,同时提供丰富的应用镜像与简化控制台,大幅降低云计算使用门槛。
235 0
|
27天前
|
弹性计算 前端开发 Ubuntu
阿里云服务器ECS的租用教程和简单的前端页面部署
本文详解阿里云学生福利领取(含300元卡券)及ECS轻量服务器选购与部署全流程:涵盖学生机免费申领、配置选型建议(Ubuntu/CentOS/Windows)、安全组设置、Nginx安装、网页部署及Xshell远程连接等实操步骤,新手友好。
301 8
|
19天前
|
人工智能 弹性计算 测试技术
2026年阿里云618大促活动云服务器优惠价格表
2026阿里云618大促以“AI加速季,智惠生产力”为主题,推出轻量服务器(低至38元/年)、ECS云服务器(99元起/年)及GPU实例(T4 4折+补贴),覆盖个人、企业与AI开发全场景,限时特惠,按需选购。
222 0