You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

web字体预加载标签放在对应样式表前后是否有加载速度优势?

问题背景

我有一个fonts.css样式表,其中为四款web字体定义了@font-face规则,示例如下:

@font-face {
    font-family: 'example';
    src: url('/fonts/example-webfont.woff2') format('woff2'),
         url('/fonts/example-webfont.woff') format('woff');
    font-weight: 400;
    font-style: normal;
    font-display: swap;
    font-stretch: normal;
}

我希望字体能够尽快加载,最大程度减少FOUC(无样式内容闪烁)问题。目前我在页面的<head>标签内引入了该样式表:

<link rel="stylesheet" href="/fonts/fonts.css" />

核心疑问:从字体可用速度的角度出发,将字体预加载(preload)标签直接放在该样式表<link>标签之前或之后,是否存在加载优势?
两种放置方式示例如下:

  • 方式一:预加载标签放在样式表之后
<link rel="stylesheet" href="/fonts/fonts.css" />
<link
  rel="preload"
  href="/fonts/examplebook-webfont.woff2"
  as="font"
  type="font/woff2"
  crossOrigin="anonymous"
/>
...
  • 方式二:预加载标签放在样式表之前
<link
  rel="preload"
  href="/fonts/examplebook-webfont.woff2"
  as="font"
  type="font/woff2"
  crossOrigin="anonymous"
/>
...
<link rel="stylesheet" href="/fonts/fonts.css" />

补充说明:

  • 当前站点使用HTTP/2协议
结论

将preload标签放在样式表标签之前有明确的加载速度优势,是推荐的写法,两种位置的实际加载效果差异来自浏览器的资源加载逻辑,和是否使用HTTP/2没有直接关系:

  • 浏览器解析HTML是自上而下的顺序,预加载扫描器会按照标签出现的顺序识别需要提前拉取的资源。如果preload标签放在更靠前的位置,浏览器会立刻发起对应字体文件的高优先级请求,和fonts.css的请求并行传输,不需要等待fonts.css下载完成、解析出内部的@font-face规则后才发现需要加载字体,这中间省掉的是「CSS文件请求往返耗时+CSS规则解析耗时」,弱网环境下这段时间差可达数百毫秒,足够让字体提前完成加载,大幅降低FOUC出现的概率。
  • 如果把preload标签放在样式表标签之后,浏览器会先发起fonts.css的请求,等解析到紧跟在后面的preload标签时,已经浪费了从开始解析head到CSS请求发出去这段可以并行拉取字体的时间窗口,preload的提前加载价值会被削弱。
  • 即便是在HTTP/2多路复用的环境下,请求发起的时机依然直接决定资源加载完成的时间——更早发起的字体请求可以和CSS、其他head内核心资源共用连接并行传输,字体可用的时间点会明显早于后置preload的写法。

额外注意:同域名下的字体preload也必须带上crossorigin="anonymous"属性,否则浏览器会重复发起两次字体请求,反而拖慢加载速度;你当前在@font-face规则里配置的font-display: swap配合前置preload的写法,已经可以最大程度规避FOUC问题。


内容的提问来源于stack exchange,提问作者PBrown

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 23:18:17