如何避免Web字体将网站拖入性能陷阱

如何避免Web字体将网站拖入性能陷阱

网络字体能为您的网站带来个性,但也会增加网站的重量。

如果字体加载时间过长,用户就会看到空白的屏幕。更糟糕的是,您的网站可能会因为文字意外移动而显得不稳定。

这也会损害 Core Web Vitals 指标–直接影响搜索排名和用户体验的指标。

在这里,每一毫秒都很重要。

那么,如何在不影响性能的前提下保留您所选择的 Web 字体呢?

让我们一步一步来分析。

首先,什么是网络安全字体和网络字体?

什么是网络安全字体?

网络安全字体是在任何地方都能使用的可靠选择。它们是大多数设备已经拥有的字体,这意味着你可以指望它们快速加载。

什么是网络安全字体?

以下是您可以使用的网络安全字体:

  • Arial
  • Times New Roman
  • Verdana
  • Trebuchet MS
  • Courier
  • Impact
  • Georgia
  • Comic Sans MS
  • 黑体
  • 宋体
  • 微软雅黑

即使选择有限,熟练的设计师也能创造性地使用这些字体。

但是,Web 安全字体经常被过度使用,给人一种“雷同”的感觉–即使你在设计网站时投入了大量的精力和金钱。

那么,如何让网站看起来更漂亮呢?

使用网络字体。

什么是网络字体?

什么是网络字体?

网络字体可以让您摆脱经常被过度使用的网络安全字体。

网络字体可以从谷歌字体等外部资源下载,也可以直接从服务器下载到用户的设备上(临时),而不是依赖用户设备上的字体

这样,您就可以使用任何符合您的品牌或设计需求的自定义字体。

我们还为您精选了最好的 Google 字体,以帮助您开始使用。

当用户访问您的网站时,网络字体会被临时下载,并通过 CSS 中的 @font-face 规则应用到文本中。

然后,网络字体就开始像本地字体一样运行–它们会根据屏幕尺寸自动调整,同时保持网站的清晰度。

随着时间的推移,字体也发展出了更有效的存储格式。与图像格式类似,字体也有 TTF、WOFF、WOFF2 和 EOT。

  • 嵌入式 OpenType (EOT):兼容旧版本的 Internet Explorer(IE9 以下)。默认情况下不压缩,但可以应用 GZIP 压缩。
  • TrueType (TTF):支持旧版 Android 浏览器(4.4 以下版本)。默认情况下未经压缩,但可进行 GZIP 压缩。
  • 网络开放字体格式 (WOFF):大多数现代浏览器都支持,包括内置压缩功能。
  • 网络开放字体格式 2 (WOFF2):与支持该格式的浏览器兼容,采用自定义压缩算法,文件大小比其他格式减少约 30%。

现代格式提供的压缩功能可提高性能,并有助于保持网站设计的功能性和视觉独特性。

什么是Core Web Vitals (CWV)指标?

问题是:谷歌希望所有用户都能获得卓越的体验。

哪个网站或应用程序能给谷歌用户带来最佳体验,哪个网站或应用程序就能得到谷歌算法的更多“关爱”。

那么如何衡量这种“体验呢?

为此,谷歌于 2020 年初推出了Core Web Vitals。

CWV包含三项指标,可以告诉谷歌,您的网站或应用程序在用户访问时的表现如何。

什么是Core Web Vitals

在这些指标上得分越高,您在谷歌上的排名就越靠前。让我们快速了解一下这些指标。

最大内容绘制(LCP)

LCP 衡量页面上最大的可见元素加载所需的时间。

这通常是图片或视频,但也可能是大块文本或嵌入式视频。

加载速度越快,网站在用户和搜索引擎眼中的表现就越好。

良好的 LCP 得分意味着用户不会等待主要内容的出现。

从交互到下一步绘画 (INP)

INP 衡量用户交互(如点击或轻点)与页面视觉响应之间的时间间隔。

与 FID 相比,它能更准确地反映互动性,因为它考虑的是整个用户旅程,而不仅仅是第一次互动。

INP 分数低意味着网站的响应速度快,能提高用户参与度和满意度。

累积布局偏移(CLS)

CLS 衡量页面加载时的稳定性。

当元素意外移动时,会让用户感到沮丧,并使页面感觉不可靠。

CLS 分数越低,说明页面加载越流畅,不会出现影响用户体验的布局偏移。

如何优化网络字体以获得更好的Core Web Vitals

那么,关于网页字体性能的大惊小怪是怎么回事?

为什么我们不能直接添加网页字体就完事了呢?当然可以。

但正如我们之前所说,网页字体不是本地字体。它们是从服务器上获取、下载并应用到网站上的,这就是问题所在。

这需要时间。

如果耗时过长,就会影响您的核心网络生命值和网站转化率。

让我们来看看优化网页字体以提高核心网页生命值的一些方法。

1. 预载字体

你希望在页面开始加载时,字体就已经准备就绪。

因此,当页面为用户准备就绪时,字体也就准备就绪了。

这就是所谓的预加载

预载字体

预加载会告诉浏览器:”嘿,这种字体很重要。请立即加载”。

假设您使用的是流行的Google 字体 Roboto

Google 字体 Roboto

您需要在 HTML 代码中添加一个属性来预载字体:rel="preload"

<link href="https://fonts.googleapis.com/css2?family=Roboto:wght@400&display=swap" as="font" type="font/woff2" crossorigin>

这样,浏览器就会知道要优先下载 Roboto 字体,这样您的文本就能更快地显示出正确的字体样式。

这就缩短了最大内容绘制(LCP)的渲染时间,因此用户可以更快地看到网站的最终版本。

2. 使用字体显示属性控制字体加载行为

然而,由于字体具有优先权,预加载可能会稍微增加初始加载时间。

font-display property 可让你在加载自定义字体时控制文本的行为。

这可以帮助您避免出现可怕的 “Flash of Invisible Text(隐形文本闪烁)”和“Flash of Unstyled Text(无样式文本闪烁)”,前者会让用户看到空白,后者会让页面显示一秒钟的备用字体,然后立即切换到自定义字体。

font-display property 有四种管理文本行为的方法:block, swap, fallback, 和 optional.

让我们来看看你需要的两种方式。

使用字体显示属性控制字体加载行为

font-display: swap– 对于大多数网站来说,该选项是最安全的选择。它能确保文本立即以备用字体显示,并在准备就绪后切换到自定义字体。

@font-face {
font-family: 'Roboto';
src: url('https://fonts.gstatic.com/s/roboto/v27/KFOmCnqEu92Fr1Me5Q.ttf') format('truetype');
font-display: swap;
}

在这里,后备字体(如 Arial 或其他系统字体)将立即加载,以保持页面的可读性。

下载 Roboto 时,它会替换掉备用字体,而不会在屏幕上留下空白。

font-display: swap

下面是字体显示交换在实际应用中的演示

font-display: optional– 如果你担心速度问题,那么如果自定义字体的加载速度不够快,浏览器就会跳过该字体。如果你不介意后备字体保留在原处,则可以使用此方法。

@font-face {
font-family: 'Roboto';
src: url('https://fonts.gstatic.com/s/roboto/v27/KFOmCnqEu92Fr1Me5Q.ttf') format('truetype');
font-display: optional;
}

当性能比设计更重要时,这个选项就很有意义,非常适合注重速度的网站。

下面是一个实际应用的例子。你不会注意到这里的切换,因为大多数字体的加载速度都足够快。

不过,如果你的字体服务器出现故障或速度变慢,可选参数就非常有用了。

3. 子集字体

大多数字体都有数百甚至数千个字符。

您可能只需要其中的一小部分。删除这些字符就叫做字体子集。

没错,你可以删除不必要的字符,以减小字体文件的大小。

子集字体

假设您的网站只需要英文字符。

FontTools 这样的工具可以帮助您对字体进行子集,使其只包含实际使用的字符。

这意味着所有在英语中不需要的 Unicode 字符都可以删除,以节省文件大小。

这样,文件大小就会从 80 KB 减小到 30 KB。

文件越小,下载速度越快,LCP 和 CLS 也会得到改善,因为字体加载速度很快,而且不会改变布局。

下面是一个例子,说明如何使用 FontTools 删除除英文字符以外的所有内容:

pyftsubset Roboto-Regular.ttf --unicodes=U+0020-007F

现在,你的 Roboto 字体只包含英文文本所需的基本拉丁字符,载入速度大大加快。

如果你更喜欢基于图形用户界面的方法,也可以试试 font-squirrel。一旦上传了字体文件,你就可以获得大量的自定义选项来添加或删除字体。

font-squirrel

4. 压缩字体

与 TTF 等旧格式相比,WOFF2 等现代字体格式提供的压缩功能可将字体大小缩小 30%。

使用最压缩版本的字体可以大大减少对页面加载时间的影响。

例如,以下是确保使用 WOFF2 的方法:

@font-face {
font-family: 'Roboto';
src: url('roboto.woff2') format('woff2'),
url('roboto.woff') format('woff');
font-weight: 400;
}

这样,支持 WOFF2 的浏览器就会默认使用 WOFF2,从而缩短加载时间,同时还能显示清晰、高质量的字体。

但是,如果浏览器无法使用 WOFF2,则默认使用 WOFF。

5. Base64 编码

这是另一种常用的优化网页字体的方法。

不过,在使用 Base64 编码字体时需要谨慎。

Base64 编码对小字体或图标最有用。

但如果过度使用,就会使 CSS 变得臃肿,增加页面加载时间,这比只使用字体本身还要糟糕。

如果要对图标字体使用 Base64 编码,首先要将字体文件转换为 Base64 格式。如下所示:

@font-face {
font-family: 'CustomIcons';
src: url('data:font/woff2;base64,d09GRgABAAAAAAn4ABAAAAAAB...') format('woff2');
font-weight: normal;
font-style: normal;
}

这种方法适用于网站中经常使用的小图标字体。

CSS 文件与嵌入的字体一起加载,从而避免了额外的 HTTP 请求。

不过,大型正文字体应避免使用这种方法,因为它会降低初始页面渲染的速度。

6. 字体的<link>与CSS@import

<link>@import 在加载性能上有很大区别。

<link> 标签以异步方式加载字体,这意味着它不会耽误页面其他部分的渲染,而 @import 则会慢一些。

尽可能使用 <link>

90%以上的情况下,你都可能需要使用 <link> 标签。根据经验,你应该避免使用@import规则,因为它们会将包含资源的加载推迟到获取文件之后。Ilya Grigorik,Shopify 首席执行官的工程师兼技术顾问

它可以独立加载字体,使页面的其他部分无需等待字体文件即可加载。

<link href= "https://fonts.googleapis.com/css2?family=Roboto:wght@400&display=swap">

这是加载 Google 字体或类似外部字体服务的首选方法。

将其置于 HTML 的 <head> 部分,可确保字体尽早开始加载,而不会阻塞其他资源。

对于关键字体,请避免使用 @import

@import 会等待 CSS 文件完全加载完毕,这会延长加载时间并损害 LCP。

@import url('https://fonts.googleapis.com/css2?family=Roboto:wght@400&display=swap');

对字体使用@import只适用于次要或不太重要的字体。在实践中,首屏内容中的任何字体都应避免使用@import。

7. 通过字体匹配和大小调整减少视觉偏移/CLS

视觉偏移(或谷歌所说的累积布局偏移(CLS))会在布局发生意外变化时出现,通常是由于字体交换造成的。

为尽量减少这种影响,请选择与自定义字体风格和尺寸非常相似的后备字体。

CSS size-adjust 属性还可以让你控制后备字体大小,从而减少加载自定义字体时的视觉偏移。

如果您的自定义字体是 Roboto,同时也是一种后备字体,则可将其大小调整为与 Roboto 匹配,从而实现几乎无缝的过渡。

@font-face {
font-family: 'Roboto';
src: url('roboto.woff2') format('woff2');
font-display: swap;
size-adjust: 100%;
}

在此,Roboto 的后备字体(如 Arial)保持一致的大小,从而在 Roboto 完全加载时减少任何明显的移动。

一旦将后备字体的大小和间距与自定义字体保持一致,就能确保当 Roboto 替换为 Arial 字体时,移动幅度最小,从而保持较低的 CLS 值,改善用户体验。

8. 找到合适的地方托管网络字体

自行托管字体并不总是意味着更快的性能。

许多第三方选项也有很好的表现,有时甚至能加快加载速度。

Web Almanac 发现,某些使用第三方字体的网站比使用自托管字体的网站加载速度更快。

托管网络字体

归根结底,字体性能与其说取决于托管选择,不如说取决于三个关键因素:

  • 内容交付网络(CDN):通过从全球多个地点提供字体,确保更快地交付。
  • HTTP/2:通过并行处理多个请求来提高加载速度,减少延迟。
  • 网络缓存策略:有效缓存字体,因此每次访问都无需重新下载。

与其纠结于托管问题,不如集中精力设置这些基本要素,无论字体托管在哪里,都能保证字体顺利加载。

如何简化网络性能优化

如果觉得上述技术过于繁琐,Jetpack 这样的插件可以让一切变得简单。

Jetpack

Jetpack 由 Automattic 开发,是专为 WordPress 网站打造的一体化解决方案。

它结合了安全、性能和营销方面的基本功能,全部由一个平台管理。

即使您不懂技术,Jetpack 也能帮助您提高网站速度、加强安全性并提升用户体验。(无需复杂设置)

小结

Web 字体能为您的网站带来独特、美观的外观。

但是,如果没有正确的调整,它们也会降低速度,让用户感到失望。

虽然我们已经介绍了基本的字体优化技术,但性能微调涉及到无数技术细节。

要想获得最佳效果,可能会感到力不从心。

这正是闪电博专业网站开发服务的用武之地。

我们将确保您的网站美观大方,优化速度和用户体验。

让我们来处理技术问题,而你则专注于建设一个真正与众不同的网站。

评论留言