一款用于快速、精美的网页字体的 API

如何使用 Google Fonts CSS API 高效传送 Web 字体。

多年来,Web 字体技术发生了许多变化。过去需要添加文字图片或 Flash 插件(这会影响网站的搜索引擎优化)是一种小众的做法,现在已然成为网络的标准做法。以前,您需要在页面加载之前加载整个字体(您甚至可能没有使用过的样式和字符),但这已经成为过去式了。

Google Fonts CSS API 也随着 Web 字体技术的变化而不断发展。它最初的价值主张已有很大进步,它允许浏览器在所有使用 API 的网站上缓存常用字体,加快网页加载速度。这已不再正确,但该 API 仍提供其他重要的优化,以便网站快速加载且字体正常运行。

使用 Google Fonts CSS API,您的网站可以仅请求所需的字体数据,从而最大限度地缩短 CSS 加载时间,确保您的网站访问者能够尽快加载您的内容。该 API 将使用适合该网络浏览器的最佳字体响应每个请求。

这一切都通过在您的代码中添加一行 HTML 实现。

如何使用 Google Fonts CSS API

Google Fonts CSS API 文档对此进行了简要总结:

您无需进行任何编程;只需向 HTML 文档添加特殊的样式表链接,然后在 CSS 样式中引用该字体即可。

您至少需要在 HTML 中添加一行代码,如下所示:

<link href="https://fonts.googleapis.com/css2?family=Roboto+Mono&display=swap" rel="stylesheet" />

向该 API 请求字体时,您可以指定所需的字体系列,还可以选择指定字体的粗细、样式、子集和许多其他选项。然后,API 将通过以下两种方式之一处理您的请求:

  1. 如果您的请求使用了 API 已有文件的常用参数,API 会立即向用户返回 CSS,将用户定向到这些文件。
  2. 如果您请求的字体使用了 API 目前未缓存的参数,API 会使用 HarfBuzz 快速对字体进行子集划分,并返回指向这些字体的 CSS。

字体文件可以很大,但不一定很大

网络字体确实可能很大。Noto Sans Japanese 在 WOFF2 中的单一字号大小就接近 3.4MB,如果要将其下载给每位用户,将会拖慢网页加载时间。当每一毫秒都至关重要且每个字节都很宝贵时,您需要确保只加载用户需要的数据。

Google Fonts CSS API 可以创建实时生成的非常小的字体文件(称为子集),以便只为用户提供网站所需的文本和样式。您可以使用 text 参数请求特定字符,而不是提供整个字体。

<link href="https://fonts.googleapis.com/css2?family=Roboto+Mono&display=swap&text=RobtMn" rel="stylesheet" />

一张图表,其中列出了基本拉丁语、基本希腊语和扩展希腊语的字符数。

CSS API 还会自动为您的用户提供额外的 Web 字体优化,而无需任何 API 参数。该 API 会向用户提供已启用 unicode-range 的 CSS 文件(如果其网络浏览器支持),以便他们仅加载您的网站所需的特定字符的字体。

unicode-range CSS 描述符现在可用于减少字体下载量。此 CSS 属性用于设置 @font-face 声明包含的一系列 Unicode 字符。如果网页中呈现了其中一个字符,系统就会下载该字体。这适用于所有类型的语言,因此您可以使用包含拉丁字符、希腊字符或西里尔字符的字体,并创建更小的子集。在上图中,您可以看到,如果必须加载所有三个字符集,则会超过 600 个字形。

一张图表,其中列出了基本拉丁语、扩展拉丁语、韩语和日语的字符数。

这还支持 Web 上的中文、日文和韩文 (CJK) 字体。在上面的图表中,您可以看到 CJK 字体覆盖的字符数是拉丁字符字体的 15-20 倍。这些字体通常非常大,而且这些语言中的许多字符的使用频率不如其他字符。

使用 CSS API 和 unicode-range 可以将文件传输量减少 约 90%。使用 unicode-range 描述符,您可以单独定义每个部分,并且只有当您的内容包含这些字符范围中的某个字符时,才会下载每个 slice。

例如:如果只想设置 Noto Sans JP 中的“こんにちは”一词,您可以:

  • 自行托管您自己的 WOFF2 文件。
  • 使用 CSS API 检索 WOFF2。
  • 使用 CSS API,并将 text= 参数设置为“こんたちの”。

比较下载 Noto Sans JP 的不同方法的图表。

在这个示例中,您可以看到,由于该 API 内置了将大型字体拆分为 Unicode 范围的支持,因此与自行托管 WOFF2 字体相比,使用 CSS API 已经节省了 97.5%。通过更进一步地精确指定要显示的文本,您可以将字体的大小进一步缩减到 CSS API 字体的 95.3%(比自托管字体小 99.9%)。

Google Fonts CSS API 会自动以用户浏览器支持的最小且最兼容的格式提供字体。如果用户使用的是支持 WOFF2 的浏览器,该 API 将以 WOFF2 格式提供字体;但如果用户使用的是旧版浏览器,该 API 将以该浏览器支持的格式提供字体。为了为每个用户减小文件大小,该 API 还会从字体中移除不需要的数据。例如,对于浏览器不需要提示数据的用户,系统会移除提示数据。

使用 Google Fonts CSS API 让您的网页字体能够满足未来需求

Google Fonts 团队还为新的 W3C 标准(WOFF2 等)不断创新网页字体技术做出了贡献。目前的一个项目是增量字体传输,它允许用户在屏幕上使用字体文件时加载字体文件的极小部分,并按需流式传输其余部分,性能超越 unicode-range。当您使用我们的网络字体 API 时,您的用户可以在浏览器中使用这些底层字体传输技术的改进。

这就是 Fonts API 的优势所在:您的用户可以获享每项新技术改进的好处,而您无需对网站进行任何更改。新的 Web 字体格式?没问题。是否支持新浏览器或操作系统?我们会为您搞定一切这样,您就可以专注于用户和内容,而不必为维护 Web 字体而烦心。

可变字体支持内置

可变字体是可在多个之间存储各种设计变体的字体文件,新版 Google Fonts CSS API 支持这些字体。添加额外的变体轴可以让字体更加灵活,但这可能会使字体文件的大小几乎翻倍。

如果您在 CSS API 请求中提供更具体的信息,Google Fonts CSS API 便只会提供您的网站所需的可变字体的部分内容,以便减少用户的下载大小。这样,您就可以在 Web 上使用可变字体,而不会导致页面加载时间过长。为此,您可以指定轴上的单个值,也可以指定一个范围;您甚至可以在一个请求中指定多个轴和多个字体系列。此 API 非常灵活,可满足您的需求。

易于植入,专为您优化

Google Fonts CSS API 可帮助您提供以下字体:

  • 与网络浏览器的兼容性更高。
  • 尽可能小。
  • 配送速度快。
  • 更易于使用。

如需详细了解 Google Fonts,请访问 fonts.google.com。如需详细了解 CSS API,请参阅 API 文档

致谢

主打图片由 leesehee 提供。