旧版浏览器直接忽略rel="preload",既不报错也不执行,仅当普通link处理;ie全系、部分android webview等完全不支持,需用降级,且href路径须与preload完全一致。

preload在旧版浏览器里会直接被忽略,不是报错
浏览器遇到不认识的 rel="preload" 时,既不执行也不报错,而是当作普通 <link> 处理——它会发请求,但 Priority 是 Low,且不触发高优调度。所谓“兼容报错”其实是误解:你不会看到控制台红字,只会发现 Network 面板里字体/CSS 没提前发起、Initiator 显示 (Other)、Timing 里 Start Time 很靠后。
怎么让 preload 对老浏览器降级为普通 link
不需要额外兼容代码,浏览器天然降级。但要注意两个关键点,否则连降级都不可靠:
-
as属性必须存在且合法:如果写了as="font",IE11 和 Safari 10 以下会完全忽略整条<link>(不发请求);换成as="style"或as="script",它们至少会当普通资源拉一次 - 不要依赖
onload回调:IE11 不支持<link>的onload事件,所以像onload="this.rel='stylesheet'"这类写法在 IE 里 CSS 就永远不会生效——得用 JS 检测资源是否加载完成再手动切换 - 避免
crossorigin空值:Safari 9–10 解析crossorigin(无等号无值)会出错,必须写成crossorigin=""或干脆省略(但字体就失效)
Chrome 50–62 和 Firefox 46–68 的特殊坑
这些中间版本支持 preload,但行为不稳定:
-
as="font"必须带crossorigin="",哪怕同域;漏掉或写成crossorigin="anonymous",Chrome 58 会静默丢弃请求 -
as="image"在 Chrome 56–60 中不识别,会退化为 Low 优先级 fetch;想保首屏图,不如直接用<img fetchpriority="high">(Chrome 100+ 才支持,老版本无效) - Firefox 56–63 对
as="script"的缓存复用有 bug:如果<script src></script>带了integrity,而preload没带,即使 URL 相同,也会重复下载
真正该担心的不是兼容性,而是滥用
比老浏览器更危险的是在现代浏览器里乱加 preload:
- 预加载非首屏资源(比如 footer 的图标字体),会抢占带宽,反而拖慢 LCP
- 对已内联的 CSS/JS 再
preload,Chrome 会多发一次请求,Network 面板里显示 duplicate -
href路径含构建时变量(如/fonts/inter.woff2?v=${hash}),服务端没渲染出来,浏览器就按字面请求/fonts/inter.woff2?v=${hash},结果 404
验证是否真起效,只看 Chrome DevTools Network 面板:筛选 font 或 script,检查 Initiator 列是不是 preload,Priority 列是不是 Highest 或 High。其他都是障眼法。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











