【问题标题】:Too many fonts loading from google fonts从谷歌字体加载的字体太多
【发布时间】:2020-04-02 17:35:55
【问题描述】:

我只嵌入了谷歌字体中的一种字体。这是嵌入代码:

 <link href="https://fonts.googleapis.com/css?family=Open+Sans&display=swap" rel="stylesheet"> 

但如果我正在查看网络监视器,则会加载 3 个字体元素和 1 个来自 google 字体的 css。 这是我得到的字体列表:

Status  Method  Domain  File    Cause   Type    Transfered  Size

200 GET fonts.googleapis.com    css?family=Open+Sans&display=swap   stylesheet  css 557 B   2.53 KB
200 GET fonts.gstatic.com   mem8YaGs126MiZpBA-UFVZ0b.woff2  font    woff2   14.04 KB    14.04 KB
200 GET fonts.gstatic.com   mem8YaGs126MiZpBA-UFW50bbck.woff2   font    woff2   11.05 KB    11.05 KB
200 GET fonts.gstatic.com   mem8YaGs126MiZpBA-UFWp0bbck.woff2   font    woff2   5.89 KB 5.89 KB

除此之外,我在附加的 css 中有一个完整的字体列表。

/* cyrillic-ext */
@font-face {
  font-family: 'Open Sans';
  font-style: normal;
  font-weight: 400;
  font-display: swap;
  src: local('Open Sans Regular'), local('OpenSans-Regular'), url(https://fonts.gstatic.com/s/opensans/v17/mem8YaGs126MiZpBA-UFWJ0bbck.woff2) format('woff2');
  unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;
}
/* cyrillic */
@font-face {
  font-family: 'Open Sans';
  font-style: normal;
  font-weight: 400;
  font-display: swap;
  src: local('Open Sans Regular'), local('OpenSans-Regular'), url(https://fonts.gstatic.com/s/opensans/v17/mem8YaGs126MiZpBA-UFUZ0bbck.woff2) format('woff2');
  unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
}
/* greek-ext */
@font-face {
  font-family: 'Open Sans';
  font-style: normal;
  font-weight: 400;
  font-display: swap;
  src: local('Open Sans Regular'), local('OpenSans-Regular'), url(https://fonts.gstatic.com/s/opensans/v17/mem8YaGs126MiZpBA-UFWZ0bbck.woff2) format('woff2');
  unicode-range: U+1F00-1FFF;
}
/* greek */
@font-face {
  font-family: 'Open Sans';
  font-style: normal;
  font-weight: 400;
  font-display: swap;
  src: local('Open Sans Regular'), local('OpenSans-Regular'), url(https://fonts.gstatic.com/s/opensans/v17/mem8YaGs126MiZpBA-UFVp0bbck.woff2) format('woff2');
  unicode-range: U+0370-03FF;
}
/* vietnamese */
@font-face {
  font-family: 'Open Sans';
  font-style: normal;
  font-weight: 400;
  font-display: swap;
  src: local('Open Sans Regular'), local('OpenSans-Regular'), url(https://fonts.gstatic.com/s/opensans/v17/mem8YaGs126MiZpBA-UFWp0bbck.woff2) format('woff2');
  unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+1EA0-1EF9, U+20AB;
}
/* latin-ext */
@font-face {
  font-family: 'Open Sans';
  font-style: normal;
  font-weight: 400;
  font-display: swap;
  src: local('Open Sans Regular'), local('OpenSans-Regular'), url(https://fonts.gstatic.com/s/opensans/v17/mem8YaGs126MiZpBA-UFW50bbck.woff2) format('woff2');
  unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
/* latin */
@font-face {
  font-family: 'Open Sans';
  font-style: normal;
  font-weight: 400;
  font-display: swap;
  src: local('Open Sans Regular'), local('OpenSans-Regular'), url(https://fonts.gstatic.com/s/opensans/v17/mem8YaGs126MiZpBA-UFVZ0b.woff2) format('woff2');
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}



这是为什么呢?

【问题讨论】:

    标签: css fonts


    【解决方案1】:

    我只嵌入了谷歌字体中的一种字体。这是嵌入代码:

    这是不正确的,您从一个字体family嵌入了多个字体和字符集。字体不是单一的东西:

    • 字体系列(Arial)
      • 字体(Arial Regular)
      • 字体(Arial 斜体)
      • 字体(Arial Bold)
      • 字体(Arial Bold Italic)

    然后将每种字体进一步拆分为包含不同字符集的更多子文件。

    如果我们查看 CSS 文件,就会加载多个字体。它们都实现了 Open Sans 字体的不同部分,特别是不同的字符集:

    • Open Sans cyrillic-ext
    • Open Sans 西里尔文
    • Open Sans greek-ext
    • Open Sans 希腊文
    • Open Sans 越南语
    • Open Sans latin-ext
    • Open Sans 拉丁文

    每个条目都声明了文件支持的一系列 unicode 字符。

    例如,如果没有这个文件,越南语字符将无法呈现:

    https://fonts.gstatic.com/s/opensans/v17/mem8YaGs126MiZpBA-UFWp0bbck.woff2

    如果没有这个文件,欧洲拉丁字符空间中的字符将无法呈现:

    https://fonts.gstatic.com/s/opensans/v17/mem8YaGs126MiZpBA-UFVZ0b.woff2

    同样,如果您选择了 italicboldbold italic 等样式,文件会为每个添加。

    最后,您没有告诉浏览器加载字体,而是告诉浏览器加载样式表,而样式表加载了字体,所以这是另一个额外的文件。

    为什么不将它们捆绑到一个文件中?

    与单独加载它们相比,这不会节省任何文件空间,并且使用 HTTP/1 它可能会加载较慢,因为它不能并行传输。

    但是,如果我纯粹用西里尔文编写网站,我真的需要在字体中使用越南语字符吗?通过仅选择您打算使用的脚本,您可以节省带宽并加快字体加载速度。这就是为什么 Google 会为每个脚本提供一个文件,而不是将它们全部捆绑到一个文件中。

    由于使用 HTTP/2,以这种方式传输大量小文件比传输单个大文件具有更好的性能

    【讨论】:

    • 我怎样才能只加载一种字体,而不是整个字体系列,我只选择了-regular 400和拉丁文,所有其他语言和粗细-样式选项都未选中,但我仍然有3 种字体加载。
    • 我更新了我的答案以解释为什么加载 2 个字体会加载 3 个文件。不管怎样,我相信我已经回答了你的问题,这就是它发生的原因。如果是这种情况,请将我的回答标记为正确,您可以随时在 stackoverflow 上提出新问题以获取后续问题。
    猜你喜欢
    • 1970-01-01
    • 2013-07-16
    • 2017-01-31
    • 1970-01-01
    • 1970-01-01
    • 2013-07-14
    • 2015-09-06
    • 1970-01-01
    • 2011-10-17
    相关资源
    最近更新 更多