Скорость сайта, свойства шрифта font-display: варианты и опции использования

При определении вариантов как ускорить сайт, не стоит забывать про шрифты, особенно когда они подгружаются с других источников. Обычно используется Google шрифты,  могут быть и другие источники, но главное что надо понимать, это контроль за поведением шрифтов на сайте, либо ускоряющие его загрузку, либо они становятся факторов замедления. Сегодня мы изучим как ускорить загрузку шрифтов на сайте по рекомендациям Google.

Определение поведения веб-шрифта при его загрузке может быть важным методом настройки производительности. Новый дескриптор отображения шрифтов для @font-faceпозволяет разработчикам решать, как их веб-шрифты будут отображаться (или откладываться) в зависимости от того, сколько времени потребуется для их загрузки.

Различия в рендеринге шрифтов сегодня

Веб-шрифты дают разработчикам возможность включать богатую типографику в свои проекты с компромиссом: если у пользователя еще нет шрифта, браузер должен потратить некоторое время на его загрузку. Поскольку сети могут быть нестабильными, это время загрузки может отрицательно повлиять на работу пользователя. В конце концов, никого не будет волновать, насколько красив ваш текст, если на его отображение уходит слишком много времени!

Чтобы снизить риск медленной загрузки шрифта, большинство браузеров реализуют тайм-аут, по истечении которого будет использоваться резервный шрифт. Это полезный метод, но, к сожалению, браузеры различаются по фактической реализации.

Браузер Тайм-аут Fallback Swap
Chrome 35+ 3 секунды да да
Опера 3 секунды да да
Fire Fox 3 секунды да да
Internet Explorer 0 секунд да да
Сафари Без тайм-аута N / A N / A
  • У Chrome и Firefox есть трехсекундный тайм-аут, после которого текст отображается с резервным шрифтом. Если шрифту удается загрузить, то в конечном итоге происходит замена, и текст повторно отображается с предполагаемым шрифтом.
  • Internet Explorer имеет тайм-аут в 0 секунд, что приводит к немедленной отрисовке текста. Если запрошенный шрифт еще не доступен, используется резервный вариант, и текст повторно отображается позже, как только запрошенный шрифт становится доступным.
  • Safari не имеет тайм-аута (или, по крайней мере, ничего, кроме базового тайм-аута сети).

Что еще хуже, разработчики имеют ограниченный контроль над принятием решения о том, как эти правила повлияют на их приложение. Разработчик, ориентированный на производительность, может предпочесть иметь более быстрый начальный опыт с использованием резервного шрифта и использовать более удобный веб-шрифт только при последующих посещениях после того, как у него будет возможность загрузить. Используя такие инструменты, как Font Loading API, можно переопределить некоторые из поведения браузера по умолчанию и добиться повышения производительности, но это происходит за счет необходимости писать нетривиальные объемы JavaScript, которые затем должны быть встроены в страницу или запрашивается из внешнего файла, что вызывает дополнительную задержку HTTP.

Чтобы помочь исправить эту ситуацию, рабочая группа CSS предложила новый @font-faceдескриптор font-displayи соответствующее свойство для управления отображением загружаемого шрифта до его полной загрузки.

График загрузки шрифтов

Подобно существующему поведению при тайм-ауте шрифта, которое сегодня реализуют некоторые браузеры, font-displayвремя жизни загрузки шрифта делится на три основных периода.

  1. Первый период — период блока шрифта . В течение этого периода, если начертание шрифта не загружено, любой элемент, пытающийся его использовать, должен вместо этого визуализировать с невидимым резервным начертанием шрифта. Если начертание шрифта успешно загружается в течение периода блокировки, оно используется как обычно.
  2. Период смены шрифтов наступает сразу после периода блока шрифтов. В течение этого периода, если начертание шрифта не загружено, любой элемент, пытающийся его использовать, должен вместо этого визуализировать с резервным начертанием шрифта. Если начертание шрифта успешно загружается в течение периода подкачки, оно используется как обычно.
  3. Период сбоя шрифта наступает сразу после периода замены шрифта. Если начертание шрифта еще не загружено в начале этого периода, оно помечается как неудачная загрузка, вызывая нормальный откат шрифта. В противном случае начертание шрифта используется нормально.

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

Какой шрифт-дисплей вам подходит?

Для работы с font-displayдескриптором добавьте его в свои @font-faceправила:

font-displayв настоящее время поддерживает следующий диапазон значений auto | block | swap | fallback | optional.

Значение auto

Auto использует любую стратегию отображения шрифтов, которую использует пользовательский агент. Большинство браузеров в настоящее время имеют стратегию по умолчанию, аналогичную блокировке .

Значение block

Block дает шрифту короткий период блока (в большинстве случаев рекомендуется 3 секунды) и бесконечный период подкачки. Другими словами, браузер сначала рисует «невидимый» текст, если шрифт не загружен, но меняет лицевую сторону шрифта, как только он загружается. Для этого браузер создает анонимный шрифт с метриками, аналогичными выбранному шрифту, но со всеми глифами, не содержащими «чернил». Это значение следует использовать только в том случае, если для использования страницы требуется отрисовка текста с использованием определенного шрифта.

Значение SWAP

Swap дает шрифту нулевой второй период блока и бесконечный период подкачки. Это означает, что браузер сразу же рисует текст с запасным вариантом, если начертание шрифта не загружено, но меняет начертание шрифта, как только оно загружается. Как и в случае с блоком , это значение следует использовать только тогда, когда для страницы важен рендеринг текста с использованием определенного шрифта, но рендеринг с любым шрифтом по-прежнему будет отображать правильное сообщение. Текст логотипа — хороший кандидат на замену, поскольку отображение названия компании с использованием разумного запасного варианта приведет к передаче сообщения, но в конечном итоге вы будете использовать официальный шрифт.

Значение FALLback

Резервный режим дает шрифту чрезвычайно малый период блока (в большинстве случаев рекомендуется 100 мс или меньше) и короткий период подкачки (в большинстве случаев рекомендуется три секунды). Другими словами, начертание шрифта сначала отображается с запасным вариантом, если оно не загружено, но шрифт заменяется местами, как только он загружается. Однако, если пройдет слишком много времени, откат будет использоваться до конца жизни страницы. резервный вариант — хороший кандидат для таких вещей, как основной текст, где вы бы хотели, чтобы пользователь начал читать как можно скорее и не хотел мешать его работе, перемещая текст по мере загрузки нового шрифта.

Значение optional

Optional дает шрифту чрезвычайно малый период блока (в большинстве случаев рекомендуется 100 мс или меньше) и нулевой период подкачки. Подобно резервному варианту , это хороший выбор, когда загружаемый шрифт более удобен, но не критичен для работы. В необязательных листья значение его в браузер , чтобы решить , следует ли инициировать шрифт скачать, который он может выбрать не делать , или это может сделать это как низкий приоритет в зависимости от того, что он считает , что было бы лучше для пользователя. Это может быть полезно в ситуациях, когда у пользователя слабое соединение, и извлечение шрифта может быть не лучшим использованием ресурсов.

Правильный подбор опции работы сайта с шрифтами позволяет поддерживать быструю скорость загрузки сайта.

Тестирование воспринимаемой производительности

Итак, как мы можем проверить влияние этих различных font-displayнастроек на воспринимаемую производительность страницы веб-сайта? Один из способов — просто обновить @font-faceправило, развернуть его, а затем запустить через WebPageTest. Это работает, но есть другой способ упростить этот рабочий процесс.

И это за счет использования функциональности WebPageTest «Inject Script» (на вкладке «Advanced») и использования API загрузки шрифтов CSS .

Сценарий inject позволяет вам изменять свойства загрузки шрифтов на данной странице.

Здесь мы используем метод, очень похожий на то, что демонстрирует Энди Дэвис в своем блоге « Улучшение воспринимаемой производительности с помощью ссылки Rel = preconnect HTTP Header» .

Ниже вы можете найти упрощенный код, который можно использовать для этого, или в Gist, который можно найти здесь :

Измените приведенный выше код и вставьте его в текстовое поле «Inject Script». Приведенный выше код будет вставлен на тестовую страницу перед выполнением теста и загрузит и определит новый шрифт (с тем же font-familyименем) с вашими обновленными настройками.

Ключ к тому, чтобы заставить это решение работать, — убедиться, что добавленный вручную шрифт добавляется после@font-face регистрации шрифтов CSS . Поскольку приоритет одноименных шрифтов font-familyравен: побеждает последний добавленный. Это отражает CSS, например, если у вас есть два селектора с одинаковой специфичностью, тот, который идет последним, «перезаписывает» первый.

Давайте посмотрим на гипотетический график тестирования:

  1. Запускается WebPageTest, браузер согласовывает соединение с сервером и запрашивает HTML.
  2. HTML загружается и анализируется, запрашиваются другие ресурсы страницы, такие как CSS и JS.
  3. На этом этапе WPT внедряет JavaScript и выполняет его. Наш новый шрифт определяется и загружается с помощью API загрузки шрифтов.
  4. CSS загружается и анализируется, он также содержит @font-faceправило с той же базовой информацией (имя шрифта, URL-адрес шрифта и т. Д.).
  5. FontFaceОбъект и @font-faceявляется CSS-связным. При синтаксическом анализе CSS шрифт добавляется в конец списка (он последний), поэтому он имеет приоритет над шрифтом, добавленным вручную.
  6. Страница загружается в обычном режиме, никаких изменений от внедренного скрипта не наблюдается.

Пункт 3 — это непредсказуемая часть этого процесса. Нет никаких временных гарантий, что внедренный скрипт будет запущен после загрузки / анализа CSS. Он может отличаться в зависимости от браузера и запускается, как только документ существует. Итак, если приведенный выше код не работает для вас при настройке вашего конкретного сайта, что еще вы можете попробовать?

Решения

Итак, я нашел два решения для устранения этой проблемы:

Заблокируйте шрифт CSS. Этот вариант далеко не идеален, но он работает. Если у вас есть @font-faceправила, определенные в их собственном отдельном файле CSS, вы можете просто использовать функциональность блока WebPageTest для блокировки шрифта CSS:

Используя пользовательский интерфейс wpt, вы можете заблокировать загрузку активов. Здесь мы блокируем загрузку шрифта css.

В этой ситуации происходит то, что наш сценарий внедрения создает все соответствующие FontFaceобъекты, и они не теряют приоритет в соответствии с @font-faceправилами CSS. У этого метода есть несколько серьезных проблем:

  1. Что будет, если у вас много шрифтов? Вам необходимо воспроизвести их все в сценарии внедрения.
  2. А как насчет того, чтобы CSS вашего шрифта был объединен с другим CSS? По сути, вам нужно заблокировать все ваши страницы CSS.

Так что да, этот метод может работать, но он далек от совершенства.

Определить загрузку CSS

Отказ от ответственности : следующий метод работает, но загрузка веб-страницы является сложной и недетерминированной . Итак, то, что работает для одного запуска (как показано в тестах ниже), внезапно перестанет работать в других тестах, использующих тот же самый код. Метод блокировки CSS намного более предсказуем.

Я нашел лучший метод — это зацепиться за тот факт, что вы можете определить, когда файл CSS загружен, с помощью небольшого количества JavaScript. Для этого можно изменить сценарий инъекции. Вот Gist с измененным кодом:

С помощью этого скрипта мы подключаемся к событию загрузки CSS, содержащему наши @font-faceправила (это важно). Итак, вот что происходит в браузере:

  1. Запускается WebPageTest, браузер согласовывает соединение с сервером и запрашивает HTML.
  2. HTML загружается и анализируется, запрашиваются другие ресурсы страницы, такие как CSS и JS.
  3. На этом этапе WPT внедряет JavaScript, и он может выполняться. Если это так, мы создаем копию <link>элемента, загружающего наш @font-faceCSS, и ждем, пока он загрузится.
  4. CSS загружается и анализируется. Браузер создает FontFaceобъекты для @font-faceправил в CSS (связанных с CSS).
  5. Срабатывает событие загрузки CSS, и наши пользовательские FontFaceобъекты добавляются к FontFaceSetпоследним, поэтому они имеют приоритет над настройками шрифтов, связанных с CSS (например, font-displayсвойством).
  6. Страница загружается с нашими измененными настройками шрифта.

Вот и все. Быстрый способ проверить различные font-displayнастройки на реальном веб-сайте и посмотреть результаты в WebPageTest.

Отладка запуска WebPageTest

Это действительно полезный совет от Энди Дэвиса, который я немного изменил для этих примеров. Если вы хотите увидеть, как выглядит консольный вывод для браузера в тесте. Вставьте следующий код в текстовое поле ‘Inject Script’:

Затем в поле «Специальные показатели» в разделе «Пользовательские» введите следующие данные:

Вкладка настраиваемых показателей позволяет получать настраиваемые показатели из теста.

Это даст вам результат, похожий на этот:

Пользовательские метрики можно найти внутри прогона теста, и они дают список результатов, полученных во время теста.

Очень полезно, если вы ищете конкретную информацию о браузере во время тестового запуска.

Посмотрим на это в действии

Я создал очень простой набор страниц, чтобы продемонстрировать эту технику. Также есть небольшая информация о том, что печатается consoleв браузерах, поддерживающих API. Если вы знакомы с DevTools, просто откройте их, и вы увидите информацию в консоли. Я создал 4 тестовых страницы:

  1. Стандартная страница с одним веб-шрифтом, загруженным с помощью @font-faceправила CSS . Это наша ссылка control ( font-display: auto) .
  2. Стандартная страница + тот же веб-шрифт, добавленный второй раз с помощью API загрузки шрифтов, с font-display: swapустановленной ссылкой .
  3. Стандартная страница + тот же веб-шрифт, добавленный второй раз с помощью API загрузки шрифтов, с font-display: fallbackустановленной ссылкой .
  4. Стандартная страница + тот же веб-шрифт, добавленный второй раз с помощью API загрузки шрифтов, с font-display: optionalустановленной ссылкой .

Страницы 2, 3 и 4 являются доказательством правильности концепции. Каждый из них включает приведенный выше сценарий после fonts.cssфайла. Таким образом, на этих страницах шрифт будет добавлен вручную FontFaceSetвместе с новым font-displayсвойством. Будет ли отображаться какие-либо изменения в WebPageTest? ПРИМЕЧАНИЕ . Веб-шрифт применяется только к заголовку (h1) на страницах, поэтому вам следует сосредоточиться на этом в следующих тестах.

Диафильм с 4 страниц, показывающий разницу, которую сценарий может иметь при загрузке шрифта.

Вы можете поближе взглянуть на сравнение 4 страниц здесь , но вот результаты, как я их вижу:

  • Необязательно: заголовок отображается в начале с невидимым текстом-заполнителем. Через ~ 100 мс отображается резервный текст. Веб-шрифт никогда не отображается.
  • Резерв: заголовок отображается в начале с невидимым текстом-заполнителем. Через ~ 100 мс отображается резервный текст. Шрифт загружается в течение 3 секунд, поэтому его заменяют.
  • Swap: заголовок сразу загружается с видимым резервным шрифтом (например, период блока 0 с в действии). После загрузки резервный шрифт заменяется веб-шрифтом.
  • Авто: Как и ожидалось, установлено значение block. Отображается невидимый текст-заполнитель, текст не отображается, пока не будет загружен веб-шрифт.

Все приведенные выше результаты являются ожидаемым результатом для каждого font-displayзначения, и тот факт, что мы видим разницу, показывает, что шрифт, добавленный программно через API загрузки шрифтов CSS, может изменить страницу. Так что давайте сделаем еще один шаг. Давайте заставим WebPageTest внедрить скрипт за нас.

В этих тестах мы используем страницу управления во всех случаях, а затем заставляем WebPageTest вводить скрипт с каждым из различных font-displayзначений. Полное сравнение результатов этих тестов можно увидеть здесь .

Результаты использования webpagetest для внедрения скриптов и изменения настроек шрифта.

Он выглядит удивительно похожим на изображение выше, не так ли? Фактически, при ближайшем рассмотрении мы видим точно такие же результаты, как указано выше, для наших вручную введенных страниц сценария. Таким образом, мы можем использовать WebPageTest для изменения font-displayсвойства страниц (и действительно любого свойства, которое не только для чтения ). Я уверен, что другие могут придумать и другие варианты использования этой техники.

Добавить в избранное -пригодится

3 КОММЕНТАРИИ

  1. статьи можно дополнить информацией о том, как улучшить производительность загрузки шрифтов на сайте:

    1. Оптимизация шрифтов: перед загрузкой шрифтов на сайт, их можно оптимизировать с помощью различных инструментов. Удаление ненужных символов, сжатие файлов и использоавние субсетов шрифта помогут сократить размер файлов и ускорить их загрузку.

    2. Ленивая загрузка шрифтов: можно применить технику ленивой загрузки шрифтов, при которой шрифты будут загружаться только в том случае, если они действительно используются на странице. Для этого можно использовать JavaScript и CSS.

    3. Кеширование шрифтов: использование кэширования позволит браузеру сохранить загруженные шрифты и использовать их при последующих запросах к сайту. Это позволит уменьшить время загрузки шрифтов при повторных посещениях страницы.

    4. Загрузка шрифтов из локального хранилища: если шрифты используются на нескольких страницах сайта, их можно загрузить один раз и сохранить в локальном хранилище браузера. При последующих запросах к сайту, шрифты будут загружаться из локального хранилища, что значительно ускорит их загрузку.

    5. Минимизация количества используемых шрифтов: использование большого количества различных шрифтов на сайте может замедлить его загрузку. Лучше выбрать несколько основных шрифтов и использовать их на всех страницах сайта.

    Внедрение этих рекомендаций поможет ускорить загрузку шрифтов на сайте и улучшить общую производительность сайта.

  2. статьи упоминается, что новый дескриптор отображения шрифтов @font-face позволяет разработчикам решать, как их веб-шрифты будут отображаться (или откладываться) в зависимости от времени загрузки. Какие конкретные настройки и методы использования этого дескриптора рекомендует Google?

ОСТАВЬТЕ ОТВЕТ

Пожалуйста, введите ваш комментарий!
пожалуйста, введите ваше имя здесь

95 − 94 =

Факторы ранжирования сайтов в поисковых системах Google и Яндекс особенности и отличия

Ранжирование сайта — это процесс определения его позиции в результатах поисковой выдачи. От того, насколько высоко находится сайт, зависит количество посетителей, которых он привлекает....

Комплексное руководство по настройке лимитов и производительности MariaDB с примерами

Правильная настройка лимитов MariaDB критически важна для оптимальной производительности и стабильности работы сервера баз данных. MariaDB — это популярная система управления базами данных, основанная на...

Нагрузка на сервер: определение причин с помощью утилит и систем контроля за сервером

Нагрузка на сервер — одна из самых распространенных проблем, с которой сталкиваются администраторы Linux-серверов. Неправильно распределенные ресурсы могут привести к снижению производительности, задержкам или...

Полная инструкция по мониторингу нагрузки серверов с помощью ATOP

ATOP — это мощный инструмент мониторинга производительности серверов Linux, который позволяет анализировать нагрузку в реальном времени, сохранять информацию для последующего анализа и выявлять узкие...

Настройка DNS, основное, вопросы, примеры записей

Каждое вычислительное устройство в Интернете получает уникальный IP-адрес, который идентифицирует его и позволяет взаимодействовать с другими устройствами. IP-адрес может быть 32-битным (IPv4) или 128-битным...

Advance COD or Partial payment for Order for WooCommerce — отключение методов оплаты и настройка наценки, настройки и обзор функционала

Advance COD or Partial Payment for Order for WooCommerce — это плагин, который открывает новые горизонты для управления процессами оплаты в интернет-магазинах на платформе...

Structured Data: Google Rich Snippet Schema for Event — SEO для событий, настройки и обзор функционала

Structured Data помогает улучшить видимость вашего контента в поисковых системах и повышает шансы на привлечение внимания пользователей. Особенно это актуально для событий, которые требуют...

bulk order plugin for WooCommerce — меню ресторана и массовые заказы, настройки и обзор функционала

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

EntraID Login — интеграция с Office 365 и Azure, настройки и обзор функционала

EntraID Login – это плагин, который позволяет интегрировать Ваш WordPress сайт с системами Office 365 и Azure Active Directory, обеспечивая удобный и безопасный способ...

ПОХОЖИЕ СТАТЬИ

Использование MariaDB Galera Cluster для WordPress

Использование MariaDB Galera Cluster для WordPress может быть важным шагом в создании высоконадёжной и масштабируемой платформы для вашего сайта. Galera Cluster позволяет вам иметь...

Как восстановить MySQL или MariaDB базу данных WordPress

Восстановление базы данных MySQL или MariaDB для WordPress — это процесс, который может показаться сложным, но, следуя четким шагам, вы можете вернуть ваш сайт...

Как восстановить WordPress из резервной копии базы данных MySQL или MariaDB

При возникновении проблем с вашим веб-сайтом на WordPress, резервная копия базы данных становится вашим лучшим другом. Как только ошибка или сбой происходят, наличие под...

Как восстановить резервную копию базы данных MySQL или MariaDB для WordPress

Восстановление резервной копии базы данных MySQL или MariaDB для WordPress — это задача, которая требует своего рода изящества и внимательности. Если ваша база данных...

Как изменить версию базы данных MySQL или MariaDB в WordPress

Изменение версии базы данных MySQL или MariaDB в WordPress может стать довольно актуальной задачей для веб-разработчиков и администраторов сайтов. Иногда это нужно для улучшения...

Как изменить движок базы данных MySQL или MariaDB в WordPress

Изменение движка базы данных MySQL или MariaDB в WordPress может показаться сложной задачей, но на самом деле, это процесс, который можно выполнить с минимальными...

Как изменить имя пользователя базы данных MySQL или MariaDB в WordPress

Изменение имени пользователя базы данных MySQL или MariaDB в WordPress может показаться сложной задачей, но на самом деле это всего лишь несколько простых шагов....

Как изменить кодировку базы данных MySQL или MariaDB в WordPress

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

Как изменить кодировку таблиц базы данных MySQL или MariaDB в WordPress

Чтобы правильно работать с базами данных в WordPress, важно понимать, какую роль играют кодировки. Исправление кодировки таблиц базы данных MySQL или MariaDB может предотвратить...

Как изменить пароль базы данных MySQL или MariaDB в WordPress

Изменение пароля базы данных MySQL или MariaDB в WordPress – это важный шаг для обеспечения безопасности вашего сайта. Если вы не наделали ошибок и...

Как изменить порт базы данных MySQL или MariaDB в WordPress

Чтобы изменить порт базы данных MySQL или MariaDB в WordPress, необходимо разобраться с тем, как это влияет на работу вашего сайта и какие шаги...

Как изменить префикс таблиц базы данных MySQL или MariaDB в WordPress через phpMyAdmin

Изменить префикс таблиц базы данных в WordPress — это задача, которая может понадобиться любому администратору сайта. Хотя процесс может показаться сложным, он вполне выполним....
OK2WEB
OK2WEB
Более 12 лет занимаюсь разработкой и продвижением сайтов. Городские порталы, информационные и новостные сайты. Сейчас в основном разрабатываю интернет магазины и коммерческие сайты. Если у вас есть вопросы пишите, стараюсь оперативно ответить и помочь.