预加载网页字体以提高加载速度

Garima Mimani
Garima Mimani

此 Codelab 将向您展示如何使用 rel="preload" 预加载网页字体,以消除任何无样式文本闪烁 (FOUT)。

测量

首先,在添加任何优化之前,先衡量网站的性能。

  1. 如需预览网站,请按查看应用。然后按全屏 全屏。
  2. 按 `Control+Shift+J`(在 Mac 上,按 `Command+Option+J`)打开开发者工具。
  3. 点击 Lighthouse 标签页。
  4. 确保已在类别列表中选中性能复选框。
  5. 点击生成报告按钮。

生成的 Lighthouse 报告会在关键路径延迟时间上限下显示资源的提取顺序。

关键请求链中存在网页字体。

在上述审核中,网页字体是关键请求链的一部分,并且是最后提取的。关键请求链表示浏览器优先提取的资源的顺序。在此应用中,Web 字体(Pacfico 和 Pacifico-Bold)是使用 @font-face 规则定义的,并且是浏览器在关键请求链中提取的最后一个资源。通常,网页字体是延迟加载的,这意味着只有在下载关键资源(CSS、JS)后才会加载网页字体。

以下是应用中提取资源的顺序:

网页字体会延迟加载。

预加载网页字体

为避免 FOUT,您可以预加载需要立即使用的网页字体。在文档开头为此应用添加 Link 元素:

<head>
 <!-- ... -->
 <link rel="preload" href="/assets/Pacifico-Bold.woff2" as="font" type="font/woff2" crossorigin>
</head>

as="font" type="font/woff2" 属性会告知浏览器将此资源作为字体下载,并有助于确定资源队列的优先级。

crossorigin 属性用于指示是否应通过 CORS 请求提取资源,因为字体可能来自其他网域。如果没有此属性,浏览器会忽略预加载的字体。

由于 Pacifico-Bold 用于页面标题,因此我们添加了预加载标记,以便更快地提取该字体。预加载 Pacifico.woff2 字体并不重要,因为它会设置非首屏文本的样式。

重新加载应用,然后再次运行 Lighthouse。查看关键路径延迟时间上限部分。

Pacifico-Bold 网页字体已预加载,并已从关键请求链中移除

请注意,Pacifico-Bold.woff2 已从关键请求链中移除。它在应用中较早获取。

Pacifico-Bold 网页字体已预加载

通过预加载,浏览器知道需要提前下载此文件。请务必注意,如果使用不当,预加载可能会对未使用的资源发出不必要的请求,从而损害性能。