Webfonts или локально загруженные шрифты?

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

Есть много новых методов, и варианты для каждого метода кажутся; Должен ли я использовать тикет? или google webfonts (с js или css)? следует ли продолжать использовать локальные загрузочные шрифты (например, метод fontsquirrel.com)?

Я перечислю методы, которые кажутся наиболее хорошо воспринятыми ниже, с некоторыми тестами, но действительно ли стоит переходить к webfont? Похоже, что он будет обладать более высокой нагрузкой на ресурсы (http-запросы) и иметь меньше типов файлов (меньше совместимости) и т.д. Но похоже, что файлы загружаются async и эффективно в большинстве случаев.

  • Это только вопрос ситуации и необходимости? Если да, то каковы они?
  • Существуют ли существенные различия между этими методами?
  • Есть ли лучший способ, который я не перечислял?
  • Что такое pro/con для производительности? Посмотрите? зависимости? Совместимость?

Я действительно ищу лучшие практики здесь, производительность - большая вещь, но это масштабируемость и простота использования. Не говоря уже о том, как выглядеть и чувствовать.


Google CSS

  • используется только внешняя таблица стилей
  • использует только наименее совместимый тип файла
  • может использовать @import или <link> или взять содержимое стилей (@font-face) и поместить его прямо в свою таблицу стилей.

результаты тестов

  78ms load of html
  36ms load of css

enter image description here


Метод Google JS

  • использует webfont.js для загрузки styleshet
  • использует только наименее совместимый тип файла
  • добавляет элемент :root с классом
  • добавляет script в голову.

результаты тестов

    171ms load of html
    176ms load of js
    32ms load of css

enter image description here


Метод Typekit

  • добавляет элемент :root с классом.
  • может использовать *.js фрагмент или файл с внешней загрузкой *.js
  • использует data:font/opentype вместо файла шрифта.
  • добавляет script в голову
  • добавляет встроенный css в голову
  • добавляет внешнюю таблицу стилей в голову

    вы можете легко добавлять/удалять/настраивать шрифты и целевые селектора с помощью typekit.com

результаты тестов

  169ms load of html
  213ms load of js
  31ms load of css
  3ms load of data:font/

enter image description here


& hellip; & Font Squirrel Method

@font-face{
    font-weight:400;
    font-style:normal;
    font-family:open_sanslight;
    src:url(../font/opensans-light-webfont.eot);
    src:url(../font/opensans-light-webfont.eot?#iefix) format(embedded-opentype),
        url(../font/opensans-light-webfont.woff) format(woff),
        url(../font/opensans-light-webfont.ttf) format(truetype),
        url(../font/opensans-light-webfont.svg#open_sanslight) format(svg)
}

& hellip; или с данными: метод font & hellip;

@font-face {
    font-family: 'open_sanslight';
    src: url('opensans-light-webfont-f.eot');
}

@font-face {
    font-family: 'open_sanslight';
    src: url(data:application/x-font-woff;charset=utf-8;base64,d09GRgABAAAAAF4sABMAAAAArXQAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAABGRlRNAAABqAAAABwAAAAcZLn0KkqwK44Jq866WBSpzpsNY2IyGAhoJFBbYjuxmyns5sNa4NwldcJ7eh3Uy5gQkURIlqWzONe3HcLsDX1x/+jifDXvbzgTBjopZElndil3hJkERJkmRJkVRJk3TJkEzJkmzOc4HLXOEOF7nEX/*thisisnotafullencodingjustanexample*/bZwUnK4yS3JlTx2Sr4USKEUSbHVX9fcGNBs4fqgw+GoNHU7lKr36Eqn0lCWt6pHFpWaUlc6lS6loSxRlirLlP/uuU01dVfT7L6gPxyqraluCpgj3WtqeC1V4VBDW2N4K1r1esw/IupKp9L1FwlqnuIAAAB42j3NvQ7BUBjG8R5tTz/0u2UjNTTESYQbMGmXLiISbeI6zBYjbuWtye7CeMJxtuf3LP8ne1+IXbWa7G3TMXZru4qLZkJRW1O2wzi3I+Li2Gik5yXpYkNGXj70YU98YQLGHxwwXxIWwO8SNmAdJBzAXku4gFNI9AF38QMjTwZ9vN6yJzq9OoEB6I8VQzDYK0ZguFKMwWiumIDxTDEFk6liBqaF4gDMFFvKxAfOxFUGAAABUxSL9gAA) format('woff'),
         url('opensans-light-webfont-f.ttf') format('truetype'),
         url('opensans-light-webfont-f.svg#open_sanslight') format('svg');
    font-weight: normal;
    font-style: normal;

}

Ответ 1

Во-первых, я кое-что объясню о предлагаемом Google. Он фактически загрузит самый маленький формат, который может обрабатывать ваш браузер. WOFF предлагает небольшие размеры файлов, и ваш браузер поддерживает его, поэтому он тот, который вы видите. WOFF также довольно широко поддерживается. Однако в Opera, например, вы, вероятно, получите версию шрифта TrueType.

Логика размера файла также, я считаю, почему Font Squirrel пытается их в этом порядке. Но это в основном спекуляция с моей стороны.

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

Теперь рассмотрим рассмотрение CSS и JS. Давайте рассмотрим следующий фрагмент HTML:

<head>
    <script type="text/javascript" src="script1.js"></script>
    <link rel="stylesheet" type="text/css" href="style1.css" />
    <style type="text/css">
        @import url(style2.css);
    </style>
    <script type="text/javascript">
        (function() {
            var wf = document.createElement('script');
            wf.src = 'script2.js';
            wf.type = 'text/javascript';
            wf.async = 'true';
            var s = document.getElementsByTagName('script')[0];
            s.parentNode.insertBefore(wf, s);
        })();
    </script>
</head>

Во многих случаях script1, style1 и style2 будут блокироваться. Это означает, что браузер не может продолжать отображать документ до тех пор, пока этот ресурс не будет загружен (хотя современные браузеры немного выдумывают). Что действительно может быть хорошим, особенно с таблицами стилей. Он предотвращает появление неровного содержимого, а также предотвращает гигантский сдвиг, который может возникать при применении стилей (а перенос содержимого на самом деле раздражает пользователя).

С другой стороны, script2 не будет блокировать. Его можно загрузить позже, и браузер может перейти к разбору и отображению остальной части документа. Так что это тоже полезно.

В частности, говоря о шрифтах (а точнее, о предложениях Google), я бы, вероятно, придерживался метода CSS (мне нравится @import, потому что он сохраняет стиль с таблицей стилей, но это может быть только я). JS файл, загруженный script (http://ajax.googleapis.com/ajax/libs/webfont/1/webfont.js), больше, чем объявление @font-face, и выглядит просто намного больше. И я не верю, что загрузка самого фактического шрифта (WOFF или TTF) блокируется, поэтому он не должен слишком сильно задерживать. Я лично не большой поклонник CDN, но факт в том, что они ДЕЙСТВИТЕЛЬНО быстры. Серверы Google будут бить большинство разделяемых планов хостинга с помощью оползня, и поскольку их шрифты настолько популярны, люди даже могут их уже кэшировать.

И все, что у меня есть.

У меня нет опыта работы с Typekit, поэтому я оставил его вне моего теоретизирования. Если есть какие-либо неточности, не считая обобщений между браузерами ради аргументов, укажите их.

Ответ 2

Я думаю, что вы очень хорошо обращались с загрузкой в ​​свой вопрос. С моей точки зрения, есть несколько источников, которые следует добавить в список, и несколько других соображений, которые необходимо изучить, чтобы получить полное представление о вариантах.


Некоторые другие авторитетные источники шрифтов

cloud.typography

http://www.typography.com/cloud/

Из того, что я могу сказать, шрифты встроены в качестве данных в файл CSS:

@font-face{ 
    font-family: "Font Name"; 
    src: url(data:application/x-font-woff;base64,d09GRk9UVE8AACSCAA0AAAAARKwAAQAAAAAiVAAAAi4AAAadAAAAAAAAAABDRkYgAAAIyAAAFCgAABmIK5m+CkdERUYAABzwAAAAHQAAACAAXQAER1BPUwAAHRAAAAQlAAAYAq+OkMNHU1VC ... ); 
    font-weight:400; font-style:normal; 
} 

Вот мои спецификации:

94ms load of css from their server
37ms load of css from our server (will vary based on your configuration)
195ms load of data:fonts from our server (will vary based on your configuration)

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

Fonts.com

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

  • Некоторые из наиболее известных шрифтов в мире доступны
  • Очень большая библиотека шрифтов (более 20 000)
  • Загрузка рабочего стола для создания макетов
  • Пользовательский инструмент для проверки веб-шрифтов в браузере
  • Элементы точной типографии и подмножества
  • Параметры самостоятельного хостинга

FontSpring

Связанный с FontSquirrel. Шрифты можно приобрести здесь по фиксированной цене. Файлы шрифтов сопутствующий CSS поставляются для развертывания на вашем собственном сервере, как и FontSquirrel.


Расширенные спецификации

Что касается общих плюсов и минусов каждой службы шрифтов, вот несколько сравнений:

Размер библиотеки шрифтов

  • Fonts.com: 20 000 +
  • FontSpring: 1000 +
  • FontSquirrel: 300 +
  • Google: 600 +
  • Typekit: 900 +
  • Typography.com (cloud.typography.com): возможно, 300+ (35 семейств)

Цены

  • Fonts.com: $20/month за 500 000 просмотров страниц
  • FontSpring: зависит от шрифта (одноразовая покупка шрифтов)
  • FontSquirrel: бесплатно
  • Google: бесплатно
  • Typekit: $4/month для 500 000 просмотров страниц
  • Typography.com: $12.50/month для 1,000,000 просмотров страниц

Качество шрифта

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

  • Fonts.com: высокий
  • FontSpring: смешанный с высоким
  • FontSquirrel: смешанный
  • Google: смешанный
  • Typekit: высокий
  • Typography.com: очень высокий (я даю это "очень высокое" обозначение, потому что Fonts.com, FontSpring и Typekit поддерживают многотипные литейные цеха, где это только шрифты H & FJ литейный завод, который является одним из лучших в мире)

Качество шрифта II: Типография

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

  • Fonts.com: кернинг, буквенный шрифт, лигатуры, альтернативные символы, фракции и т.д.
  • FontSpring: Нет
  • FontSquirrel: Нет
  • Google: Нет
  • Typekit: None
  • Typography.com: маленькие кепки, лигатуры, альтернативные символы, альтернативные стили чисел, фракции и т.д.

Поддержка браузера

В основном это относится к форматам шрифтов, которые поддерживаются каждой службой. Основные из них:

  • EOT: для Internet Explorer (IE 4 +)
  • TrueType и OpenType: традиционные форматы (Safari 3.1+, FF 3.5+, Opera 10 +)
  • WOFF: новый стандарт для веб-шрифтов (FF 3.6+, Chrome 5 +)
  • SVG: IOS < 4.2

Дополнительная информация на Правило @Font-Face и полезные веб-трюки для веб-сайтов

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

@font-face {
  font-family: 'MyWebFont';
  src: url('webfont.eot'); /* IE9 Compat Modes */
  src: url('webfont.eot?#iefix') format('embedded-opentype'), /* IE6-IE8 */
       url('webfont.woff') format('woff'), /* Modern Browsers */
       url('webfont.ttf')  format('truetype'), /* Safari, Android, iOS */
       url('webfont.svg#svgFontName') format('svg'); /* Legacy iOS */
  }

Производительность I: Загрузки

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

Платные услуги, такие как Fonts.com, Typekit или Typography.com, используют методы для определения правильного формата, а затем доставляют правильный формат шрифта, часто как данные base64 в файле CSS.

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

Производительность II: Подмножество

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

  • Fonts.com: очень подробный контроль
  • FontSpring: можно перекомпилировать как подмножество через FontSquirrel webfont generator
  • FontSquirrel: можно перекомпилировать как подмножество через webfont generator
  • Google: очень подробный контроль
  • Typekit: ограниченные опции "все символы" или "по умолчанию"
  • Typography.com: очень подробный контроль

Производительность III: Доставка

  • Fonts.com: глобальный CDN или собственный сервер.
  • FontSpring. На основе вашего сервера.
  • FontSquirrel: на основе вашего сервера
  • Google: глобальный супер-CDN
  • Typekit: глобальный CDN
  • Typography.com: глобальный CDN (125 000 серверов)

Поддержка языков

  • Fonts.com: 40 языков, включая азиатские и ближневосточные
  • FontSpring: западный, в зависимости от шрифта
  • FontSquirrel: западный, в зависимости от шрифта
  • Google: западный, в зависимости от шрифта
  • Typekit: западный, в зависимости от шрифта
  • Typography.com: западный, в зависимости от шрифта

Тестирование и внедрение

  • Fonts.com: очень просто, с обширными и настраиваемыми инструментами.
  • FontSpring: технический (сделай сам)
  • FontSquirrel: технический (сделай сам)
  • Google: Easy
  • Typekit: Easy
  • Typography.com: простое тестирование, немного более сложное для изменения после развертывания

Ответ 3

Ну, как вы после

... Ищем лучшие практики здесь, производительность - большая вещь, но это масштабируемость и простота использования. Не говоря уже о том, как выглядеть и чувствовать.

ответ (как всегда в веб-дизайне): Это зависит!

Одно можно сказать наверняка, что я бы не рекомендовал использовать JS-подход (показан во втором примере).

Лично мне не нравится делать презентационные вещи и стили CSS в зависимости от Javascript, даже если подавляющее большинство пользователей разрешено. Речь идет не о том, чтобы не смешивать вещи.

И как вы можете видеть в своем примере, есть какой-то FOUC (flas of nonyled content), потому что страница уже отображается браузером до того, как будет доступен шрифт. Как только это произойдет, страница будет перерисована. И чем крупнее сайт, тем больше влияние (производительность)!

Поэтому я никогда не использовал бы JS-решение для встраивания шрифтов.

Теперь давайте посмотрим на чистые методы CSS.
Поскольку довольно долго здесь обсуждается "против @import". Лично я предпочитаю избегать использования @import и всегда использовать только <link>. Но это в основном вопрос личных предпочтений. Единственное, что вы никогда не должны делать, это смешивать их обоих!

Локальный и CDN
При принятии решения о том, размещать ли файлы шрифтов локально или использовать CDN, тогда imho это в основном зависит от количества разных шрифтов и соответствующих шрифтов, которые вы хотите внедрить.

Почему это важно или играет роль?
С точки зрения производительности я бы рекомендовал включить шрифт Base64, закодированный в вашей (одной) таблице стилей. Но только формат .woff, поскольку это используется почти всеми современными браузерами, что означает для большинства ваших посетителей. Для всех остальных пользователей с дополнительным запросом.

Но из-за "накладных расходов", вызванных кодировкой Base64 и размером файла шрифта (даже в формате .woff), этот метод должен использоваться только в том случае, если у вас есть не более 3 или 4 разных шрифта. И всегда убедитесь, что ваш сервер поставляет файлы (CSS) gzip'ed.

Большим преимуществом этого является то, что у вас нет дополнительного запроса для файла шрифта. А после загрузки первой страницы (независимо от того, на какой странице вашего сайта) файл CSS кэшируется. Это также является преимуществом, если вы используете кэш приложений HTML5 (что вы, безусловно, сделаете).

Кроме того, что автор не должен использовать на своем сайте более трех или четырех разных шрифтов, давайте посмотрим на способ использования Google CDN.

Прежде всего помните, что вы можете (и всегда должны) включать все нужные шрифты в один единственный <link>, например:

<link href='http://fonts.googleapis.com/css?family=PT+Serif:400,700,400italic,700italic|PT+Sans:400,700,400italic,700italic|Montez' rel='stylesheet' type='text/css'>

Это приведет к следующему ответу:

@font-face {
  font-family: 'Montez';
  font-style: normal;
  font-weight: 400;
  src: local('Montez'), local('Montez-Regular'), url(http://themes.googleusercontent.com/static/fonts/montez/v4/Zfcl-OLECD6-4EcdWMp-Tw.woff) format('woff');
}
@font-face {
  font-family: 'PT Sans';
  font-style: normal;
  font-weight: 400;
  src: local('PT Sans'), local('PTSans-Regular'), url(http://themes.googleusercontent.com/static/fonts/ptsans/v6/LKf8nhXsWg5ybwEGXk8UBQ.woff) format('woff');
}
@font-face {
  font-family: 'PT Sans';
  font-style: normal;
  font-weight: 700;
  src: local('PT Sans Bold'), local('PTSans-Bold'), url(http://themes.googleusercontent.com/static/fonts/ptsans/v6/0XxGQsSc1g4rdRdjJKZrNBsxEYwM7FgeyaSgU71cLG0.woff) format('woff');
}
@font-face {
  font-family: 'PT Sans';
  font-style: italic;
  font-weight: 400;
  src: local('PT Sans Italic'), local('PTSans-Italic'), url(http://themes.googleusercontent.com/static/fonts/ptsans/v6/PIPMHY90P7jtyjpXuZ2cLD8E0i7KZn-EPnyo3HZu7kw.woff) format('woff');
}
@font-face {
  font-family: 'PT Sans';
  font-style: italic;
  font-weight: 700;
  src: local('PT Sans Bold Italic'), local('PTSans-BoldItalic'), url(http://themes.googleusercontent.com/static/fonts/ptsans/v6/lILlYDvubYemzYzN7GbLkHhCUOGz7vYGh680lGh-uXM.woff) format('woff');
}
@font-face {
  font-family: 'PT Serif';
  font-style: normal;
  font-weight: 400;
  src: local('PT Serif'), local('PTSerif-Regular'), url(http://themes.googleusercontent.com/static/fonts/ptserif/v6/sDRi4fY9bOiJUbgq53yZCfesZW2xOQ-xsNqO47m55DA.woff) format('woff');
}
@font-face {
  font-family: 'PT Serif';
  font-style: normal;
  font-weight: 700;
  src: local('PT Serif Bold'), local('PTSerif-Bold'), url(http://themes.googleusercontent.com/static/fonts/ptserif/v6/QABk9IxT-LFTJ_dQzv7xpIbN6UDyHWBl620a-IRfuBk.woff) format('woff');
}
@font-face {
  font-family: 'PT Serif';
  font-style: italic;
  font-weight: 400;
  src: local('PT Serif Italic'), local('PTSerif-Italic'), url(http://themes.googleusercontent.com/static/fonts/ptserif/v6/03aPdn7fFF3H6ngCgAlQzBsxEYwM7FgeyaSgU71cLG0.woff) format('woff');
}
@font-face {
  font-family: 'PT Serif';
  font-style: italic;
  font-weight: 700;
  src: local('PT Serif Bold Italic'), local('PTSerif-BoldItalic'), url(http://themes.googleusercontent.com/static/fonts/ptserif/v6/Foydq9xJp--nfYIx2TBz9QFhaRv2pGgT5Kf0An0s4MM.woff) format('woff');
}

Как вы можете видеть, существует 9 разных файлов шрифтов, что означает в общей сложности 10 (включая один из элементов ссылки), если у пользователя нет одного или нескольких запрошенных шрифтов, установленных локально. И эти запросы повторяются при каждом новом запросе страницы на ваш сайт (хотя больше данных не передается)! Также ответ на запрос <link> никогда не кэшируется.

Рекомендация:
В конце концов, я бы рекомендовал включить ваши файлы шрифтов в формат .woff Base64, закодированный в вашей таблице стилей!

Посмотрите эту приятную статью для примера и описания того, как это сделать!

Ответ 4

Я использую встроенный метод css, потому что накладные расходы дополнительного запроса больше, чем увеличение размера при кодировании bease64. Это также дополнительно компенсируется сжатием gizip сервером файлов css.

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

Независимо от метода, вы можете уменьшить размер файла шрифта, только включив в него наборы символов.

Ответ 5

Лично я использую Google Fonts. У них есть хороший выбор, и они недавно улучшили сжатие на шрифтах, перейдя к сжатию Zopfli. Google стремится сделать Интернет более быстрым, поэтому я предполагаю, что большая оптимизация в этой части также исходит от них.

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

Я не знаю о Typekit и других, но с Google Fonts вы можете выбрать, чтобы обслуживать определенные подмножества и диапазон символов, чтобы ускорить доставку еще больше.

Выбор подмножества:

<link href="http://fonts.googleapis.com/css?family=Open+Sans&subset=latin" rel="stylesheet">

Выбор диапазона символов:

<!-- Only serve H,W,e,l,o,r and d -->
<link href="http://fonts.googleapis.com/css?family=Open+Sans&text=HelloWorld" rel="stylesheet">

Вы можете использовать dns-prefetch для дальнейшего улучшения скорости доставки шрифтов.

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

Короче говоря:

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

Ответ 6

Лучшие опции - импортировать шрифты с помощью ajax, например:

<script>
    (function() {
        var font = document.createElement('link'); 
        font.type = 'text/css'; 
        font.rel = 'stylesheet';
        font.href = '/url/to/font.css';
        var s = document.getElementsByTagName('link')[0]; 
        s.parentNode.insertBefore(font, s);
      })();
</script>

Я делаю это на своей веб-странице и увеличиваю 9 баллов в тесте Google Insights.