Appearance
preload、prefetch、preconnect 有什么区别?
问题
HTML 里哪个标签可以预加载?preload、prefetch、preconnect 分别适合什么场景?
结论
资源提示通常通过 <link> 标签完成,但不同 rel 的语义不同。
preload 是“当前页面很快就要用”的高优先级声明。它会提前请求资源,但不会自动应用资源,所以字体、脚本、图片等都要写对 as,跨源字体通常还要加 crossorigin。
prefetch 是“未来导航或未来交互可能会用”的低优先级预取。它适合下一页资源,不适合当前首屏关键资源。
preconnect 不是下载具体文件,而是提前建立到目标源的连接,包括 DNS、TCP、TLS 等准备工作。它适合关键第三方域名,例如字体 CDN、接口域名,但数量要少。
Demo
html
<head>
<!-- 当前页首屏字体:提前下载,并声明资源类型 -->
<link
rel="preload"
href="/fonts/inter.woff2"
as="font"
type="font/woff2"
crossorigin
>
<!-- 关键第三方域名:提前建连 -->
<link rel="preconnect" href="https://cdn.example.com">
<!-- 下一页可能用到的数据:低优先级预取 -->
<link rel="prefetch" href="/next-page-data.json">
</head>常见错误:
- 用
prefetch加载当前首屏关键资源。 preload缺少或写错as,导致优先级、缓存复用或安全策略不符合预期。- 对大量第三方域名使用
preconnect,反而浪费连接资源。