只有当字体被@font-face引用且首屏立即使用时才该用link rel="preload";必须加crossorigin属性,href和type需与@font-face完全一致,并配合font-display:swap。

什么时候该用 link rel="preload" 加载字体
只有当字体文件被 CSS 中的 @font-face 引用,且你明确知道它会在首屏渲染中立即使用(比如标题、正文主字体),才值得预加载。如果只是页面底部模块或交互后才显示的字体,预加载反而浪费带宽和连接数。
常见误用场景:把所有 @font-face 对应的字体都加上 preload;或者在未声明 crossorigin 的情况下预加载跨域字体(导致浏览器拒绝应用)。
preload 字体必须加 crossorigin
绝大多数自定义字体(尤其是托管在 CDN 或不同域名下)属于跨域资源。浏览器对字体文件的加载有严格 CORS 要求:即使只是预加载,也必须声明 crossorigin,否则字体虽能下载,但后续 @font-face 无法复用该请求,造成重复下载甚至 FOIT/FOUT 加剧。
-
crossorigin="anonymous"是最常用值(不发送凭据) - 如果字体服务需要 cookies 或认证头,才用
crossorigin="use-credentials"(极少见) - 绝对不要省略
crossorigin属性——哪怕字体和 HTML 同源,也建议显式写上,避免未来迁移时出错
如何匹配 preload 和 @font-face 的字体描述符
预加载不会自动绑定到某个 @font-face 块,浏览器只按 as="font" + type + URL 完全一致来复用缓存。所以要注意:
使用 Puppeteer + Chrome 将 HTML 渲染为中文 PDF,自动处理图表等待、Tab 展开、动画、测高、白边消除、防分页,适用于看板、报表、网页和交互图表转 PDF。
-
href必须和@font-face src: url(...)中的路径**完全相同**(包括查询参数、大小写、斜杠结尾) - 推荐显式指定
type,例如type="font/woff2",避免浏览器因 MIME 类型不匹配而忽略复用 -
as="font"是必须的,不能写成as="script"或留空 - 字体格式优先级要一致:如果
@font-face中src列了woff2在前、woff在后,那preload应该只预加载woff2版本
示例:
<link rel="preload" href="/fonts/inter-var-latin.woff2" as="font" type="font/woff2" crossorigin="anonymous">
对应 CSS 中:
@font-face {
font-family: 'Inter';
src: url('/fonts/inter-var-latin.woff2') format('woff2');
}
预加载后仍出现 FOIT?检查字体加载时机链
预加载只是让字体文件尽早开始下载,但真正“可用”还依赖两个关键点:CSS 解析完成 + 浏览器触发字体下载(即使已 preload)+ 渲染引擎应用字体。容易被忽略的断点:
- CSS 文件本身没预加载或阻塞严重,导致
@font-face规则迟迟不解析 - 字体文件体积过大(>100KB),即使预加载,下载+解码仍耗时;可考虑子集化或降级 fallback
- 用了
font-display: block(默认值),会强制等待字体加载完成才显示文字;生产环境更推荐font-display: swap配合 preload,兼顾性能与体验 - 开发者工具 Network 面板里看
Initiator列:确认字体请求来源是preload而非css,否则说明 URL 不匹配或 crossorigin 缺失
真正起效的组合往往是:preload + font-display: swap + 尽早内联关键 CSS(含 @font-face)。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!










