Gatsby.js: загрузка шрифтов Google для тем оформления без блокировки рендеринга

Я использую Gatsby.js и его плагин Typography с темой Irving.

Эта тема требует использования Google Fonts "Exo" и "Yrsa" и добавляет импорт в <head> раздел экспортируемых статических html-файлов:

<link href="//fonts.googleapis.com/css?family=Exo:700|Yrsa:400,700" rel="stylesheet" type="text/css"/>

Этот импорт является контентом, блокирующим рендеринг, и я бы предпочел его избегать, если это возможно, как для пользователей, так и для моей оценки Google PageSpeed ​​Insights.

Я попытался использовать https://github.com/didierfranc/gatsby-plugin-google-fonts и добавил следующее в свой gatsby-config.js:

{
  resolve: `gatsby-plugin-google-fonts`,
  options: {
    fonts: [
      `Exo\:700`,
      `Yrsa\:400,700`,
    ],
  }
},

Однако это просто добавляет второй вызов импорта. Должен ли я поместить их в статический каталог? Даже тогда, как я могу настроить типографику так, чтобы она по-прежнему использовала эти шрифты, не импортируя их отдельно?

1 ответ

Вы могли бы получить лучшие результаты с font-display:swap, К сожалению, размещенные в Google шрифты пока не поддерживают эту функцию, поэтому вместо этого я решил самостоятельно размещать свои шрифты, используя typeface-* Пакет npm, созданный Кайлом, который также занимается Gatsby.

Это также помогает вашему приложению работать лучше без подключения к Интернету, так как вы используете Gatsby и можете добавить автономный плагин. В некоторых странах даже может быть отключен Google.

Если вы также используете плагин для типографики, вот пример кода конфигурации, извлеченного из Qards:

import Typography from "typography";

let bodyFontFamily = ["Roboto", "Helvetica", "Arial", "sans-serif"];
let headerFontFamily = bodyFontFamily;

const typography = new Typography({
    baseFontSize    : "16px",
    baseLineHeight  : 1,
    omitGoogleFont  : true,
    headerFontFamily: headerFontFamily,
    bodyFontFamily  : bodyFontFamily
});

export default typography;

Гэтсби-browser.js:

exports.onInitialClientRender = () => {
  require("typeface-roboto");
};
Другие вопросы по тегам