С тех пор, как возникли проблемы, вызванные использованием Cufon, я рискнул отказаться от использования внешних ресурсов шрифтов, но в последнее время я искал альтернативные методы загрузки шрифтов, чтобы увидеть, есть ли лучший способ; у лучших методов есть способ просто появиться неожиданно.
Есть много новых методов и, кажется, вариации для каждого метода; Стоит ли мне использовать набор текста ? или веб-шрифты Google (с js или css)? следует ли мне продолжать использовать шрифты с локальной загрузкой (например, метод, созданный fontsquirrel.com)?
Я перечислю методы, которые кажутся наиболее хорошо принятыми ниже, с некоторыми тестами, но действительно ли стоит переходить на веб-шрифт? Кажется, что он будет нести более высокую нагрузку на ресурсы (HTTP-запросы) и будет иметь меньше типов форматов файлов (меньшая совместимость) и т. Д. Но похоже, что файлы загружаются асинхронно и эффективно в большинстве случаев.
- Это просто вопрос ситуации и необходимости? Если так, то кто они?
- Есть ли кардинальные различия между этими методами?
- Есть ли лучший метод, которого я не перечислил?
- Какие плюсы и минусы производительности? Смотреть? зависимости? совместимость?
Я действительно ищу здесь передовой опыт, производительность - это важная вещь, но также важны масштабируемость и простота использования. Не говоря уже о внешнем виде.
Google CSS
- использует только внешнюю таблицу стилей
- использует только наименьший совместимый тип файла
- может использовать
@import
или<link>
или взять содержимое styleshee (@font-face
) и поместить его прямо в вашу собственную таблицу стилей.
результаты теста
78ms load of html 36ms load of css
Метод Google JS
- использует
webfont.js
для загрузки stylehet - использует только наименьший совместимый тип файла
- добавляет
:root
элемент с классом - добавляет сценарий в голову.
результаты теста
171ms load of html 176ms load of js 32ms load of css
Typekit метод
- добавляет
:root
элемент с классом. - может использовать
*.js
сниппет или загружаемый извне файловый*.js
файл - использует
data:font/opentype
вместо файла шрифта. - добавляет сценарий в голову
- добавляет встроенный CSS в заголовок
добавляет внешнюю таблицу стилей в заголовок
вы можете легко добавлять / удалять / настраивать шрифты и целевые селекторы с typekit.com
результаты теста
169ms load of html 213ms load of js 31ms load of css 3ms load of data:font/
… И метод Font Squirrel
@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)
}
… Или с данными: метод шрифта…
@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;
}
источник
<link href='http://fonts.googleapis.com/css?family=Open+Sans:300' rel='stylesheet'>
Georgian
веб-шрифтов. Я использую метод font-squirrel, и мне тоже хотелось бы получить отличный ответ на этот вопрос.@font-face
объявления, возможно, вы найдете полезную информацию. paulirish.com/2009/bulletproof-font-face-implementation-syntaxОтветы:
Во-первых, я кое-что проясню по поводу предложения Google. Он фактически загрузит наименьший формат, который может обработать ваш браузер. WOFF предлагает файлы небольших размеров, и ваш браузер поддерживает это, поэтому вы видите именно их. WOFF также довольно широко поддерживается. Однако, например, в Opera вы, вероятно, получите версию шрифта TrueType.
Я считаю, что логика размера файла также объясняет, почему Font Squirrel пробует их именно в таком порядке. Но это в основном предположения с моей стороны.
Если вы работаете в среде, где учитываются все запросы и байты, вам придется провести профилирование, чтобы выяснить, что лучше всего подходит для вашего варианта использования. Будут ли люди просматривать только одну страницу и больше не заходить? В таком случае правила кеширования не имеют большого значения. Если они просматривают или возвращаются, у Google могут быть лучшие правила кеширования, чем на вашем сервере. Большая проблема - задержка или пропускная способность? В случае задержки стремитесь к меньшему количеству запросов, поэтому разместите его локально и объедините файлы как можно больше. Если есть пропускная способность, выберите тот вариант, который дает наименьший код и наименьший формат шрифта.
Теперь перейдем к рассмотрению CSS и JS. Давайте посмотрим на следующий фрагмент HTML:
Во многих случаях
script1
,style1
иstyle2
будет блокирование. Это означает, что браузер не может продолжать отображение документа, пока этот ресурс не загрузится (хотя современные браузеры немного ошибаются). Что на самом деле может быть хорошо, особенно с таблицами стилей. Это предотвращает появление нестилизованного контента, а также предотвращает гигантский сдвиг, который может произойти при применении стилей (а смещение контента действительно раздражает пользователя).С другой стороны,
script2
не было бы блокировки. Его можно загрузить позже, и браузер может перейти к синтаксическому анализу и отображению остальной части документа. Так что это тоже может быть полезно.Говоря конкретно о шрифтах (и даже более конкретно о предложениях Google), я бы, вероятно, придерживался метода CSS (мне нравится,
@import
потому что он сохраняет стили с таблицей стилей, но это мог быть только я). Файл JS, загруженный сценарием ( http://ajax.googleapis.com/ajax/libs/webfont/1/webfont.js ), больше, чем@font-face
декларация, и просто выглядит как намного больше работы. И я не верю, что загрузка самого шрифта (WOFF или TTF) блокирует, так что это не должно сильно задерживать. Я лично не большой поклонник CDN, но факт в том, что они ДЕЙСТВИТЕЛЬНО быстрые. Серверы Google опередят большинство планов виртуального хостинга, а поскольку их шрифты настолько популярны, люди могут даже уже кэшировать их.И это все, что у меня есть.
У меня нет опыта работы с Typekit, поэтому я исключил его из теоретических соображений. Если есть какие-либо неточности, не считая обобщений между браузерами ради аргументов, укажите на них.
источник
Я думаю, что вы очень хорошо ответили на время загрузки в своем вопросе. С моей точки зрения, есть несколько источников, которые следует добавить в список, и еще несколько соображений, которые следует изучить, чтобы получить полное представление о вариантах.
Некоторые другие авторитетные источники шрифтов
cloud.typography
http://www.typography.com/cloud/
Насколько я могу судить, шрифты встраиваются как данные в файл CSS:
Вот мои характеристики:
Вот их высокоуровневое описание их развертывания .
Fonts.com
Я не пользовался этой услугой, но они являются хорошо известными поставщиками шрифтов, и информация, которую они разместили на своем сайте, впечатляет. У меня нет спецификаций их точных методов, но вот что я знаю точно:
FontSpring
Аффилирован с FontSquirrel. Шрифты можно приобрести здесь по фиксированной цене. Поставляются файлы шрифтов и сопутствующий CSS для развертывания на вашем собственном сервере, как и FontSquirrel.
Расширенные характеристики
Что касается общих плюсов и минусов каждой службы шрифтов, вот несколько сравнений:
Размер библиотеки шрифтов
Ценообразование
Качество шрифта
Качество веб-шрифтов может сильно различаться. Это может включать в себя такие вещи, как сами формы букв, интервал или размер набора символов. Все это определяет общее впечатление о качестве шрифта. Хотя в бесплатных вариантах есть несколько хороших вариантов, у них также есть некоторые шрифты, которые не такого высокого качества, поэтому вы должны тщательно выбирать из этих источников.
Качество шрифта II: Типографика
В типографике для настольных компьютеров есть множество усовершенствований, которые было действительно сложно реализовать в веб-шрифтах. Некоторые из этих услуг предлагают способы их предоставления.
Поддержка браузера
В основном это сводится к форматам шрифтов, которые поддерживаются каждой службой. Основные из них:
Дополнительная информация в Правиле @ Font-Face и полезных трюках с веб-шрифтами
Все эти службы поддерживают основные форматы шрифтов. С собственными шрифтами, если вы используете правильный синтаксис, вы должны быть защищены. Вот обновление пуленепробиваемого синтаксиса от FontSpring 2011 года :
Производительность I: Загрузки
Насколько я понимаю, использование приведенного выше синтаксиса позволяет браузерам получать тот формат, который им подходит, поэтому не нужно загружать ненужные файлы для форматов шрифтов, которые не работают.
Платные сервисы, такие как Fonts.com, Typekit или Typography.com, используют методы для определения правильного формата, а затем предоставляют правильный формат шрифта, часто как данные base64 в файле CSS.
Насколько я могу судить, различия в методах, которые вы перечислили выше, довольно незначительны для пользователей высокоскоростного Интернета (похоже, разница <200 мс), но их стоит рассмотреть для устройств в более медленных сетях, особенно для некэшированных обращений к страницам.
Перформанс II: Подмножество
Если вы знаете, что вы хотите использовать только определенные символы, вы можете создать свой шрифт с подмножеством символов и, таким образом, уменьшить размер загрузки.
Производительность III: Доставка
Языковая поддержка
Тестирование и внедрение
источник
Ну как ты после
ответ (как всегда в веб-дизайне): это зависит от обстоятельств!
Одно можно сказать наверняка: я бы не рекомендовал использовать подход JS (показанный во втором примере).
Лично мне не нравится делать презентационные вещи и стили CSS в зависимости от Javascript, хотя у подавляющего большинства пользователей он включен. Это вопрос не путать.
И, как вы можете видеть в данном примере, есть своего рода FOUC (флэты нестилизованного содержимого), потому что страница уже отображается браузером до того, как шрифт станет доступным. Как только это произойдет, страница будет перерисована. И чем больше размер сайта, тем больше влияние (производительность)!
Поэтому я бы никогда не стал использовать какое-либо JS-решение для встраивания шрифтов.
Теперь давайте посмотрим на чистые методы CSS.
С давних пор здесь обсуждается "vs. @import". Лично я предпочитаю избегать использования @import и всегда использовать
<link>
только. Но это в основном вопрос личных предпочтений. Единственное, чего никогда не следует делать, - это смешивать их обоих!Локальный или CDN
Когда вы решаете, размещать ли ваши файлы шрифтов локально или использовать CDN, имхо это в основном зависит от количества различных шрифтов и соответствующих шрифтов, которые вы хотите встроить.
Почему это важно или играет роль?
С точки зрения производительности я бы рекомендовал включить шрифт Base64, закодированный в вашу (одну) таблицу стилей. Но только формат .woff, так как он используется почти всеми современными браузерами, то есть для большинства ваших посетителей. Для всех остальных пользователей действует дополнительный запрос.
Но из-за «накладных расходов», вызванных кодировкой Base64 и размером файла шрифта (даже в формате .woff), этот метод следует использовать только в том случае, если у вас не более 3 или 4 различных шрифтов. И всегда убедитесь, что ваш сервер доставляет файлы (CSS) в сжатом виде.
Большим преимуществом этого является то, что у вас нет дополнительного запроса на файл шрифта. И после загрузки первой страницы (независимо от того, какая страница вашего сайта) файл CSS кешируется. Это также является преимуществом, если вы используете кеш приложения HTML5 (что вы, безусловно, будете делать).
Помимо того факта, что автор не должен использовать на своем сайте более 3 или 4 различных шрифтов, давайте посмотрим на метод использования CDN Google.
Прежде всего имейте в виду, что вы можете (и всегда должны) включать все желаемые шрифты в один
<link>
, например:Это приведет к следующему ответу:
Как видите, существует 9 различных файлов шрифтов, что означает всего 10 запросов (включая один из элементов ссылки), если у пользователя нет одного или нескольких запрошенных шрифтов, установленных локально. И эти запросы повторяются при каждом запросе новой страницы на ваш сайт (хотя данные больше не передаются)! Также ответ на запрос
<link>
никогда не кэшируется.Рекомендация: В
конце концов, я бы очень рекомендовал включить ваши файлы шрифтов в формате .woff в кодировке Base64 в вашу таблицу стилей!
См. Эту прекрасную статью для примера и описания того, как это сделать!
источник
Я использую встроенный метод css, потому что накладные расходы на дополнительный запрос больше, чем увеличение размера при кодировании bease64. Это также компенсируется сжатием файлов css сервером gizip.
Другой вариант - использовать асинхронную загрузку шрифтов, но чаще всего пользователи видят, как шрифты появляются после загрузки.
Независимо от метода, вы можете уменьшить размер файла шрифта, включив только те наборы символов, которые вы будете использовать.
источник
Лично я использую Google Fonts. У них есть хороший выбор, и они недавно улучшили сжатие шрифтов, перейдя также на сжатие Zopfli . Google стремится сделать Интернет быстрее, поэтому я предполагаю, что и в этой части они принесут больше оптимизации.
Что бы вы ни выбрали в качестве аутсорсинговой доставки шрифтов, вы всегда будете получать снижение скорости из-за запросов на получение шрифтов. Лучше всего, если смотреть с точки зрения скорости, было бы самостоятельно обслуживать шрифты. Если вас не волнуют лишние миллисекунды, которые требуются для загрузки из аутсорсинговой доставки, вам следует пойти на это, если вы считаете, что простота их использования стоит миллисекунд.
Я не знаю о Typekit и других, но с помощью Google Fonts вы можете выбрать для обслуживания определенные подмножества и диапазон символов, чтобы еще больше ускорить доставку.
Выбор подмножества:
Выбор круга персонажей:
Вы можете использовать dns-prefetch, чтобы еще больше повысить скорость с доставкой шрифтов.
Я действительно думаю и надеюсь, что Google сделает все возможное, чтобы максимально ускорить доставку шрифтов. Миллисекунды, необходимые для их загрузки, не повредят моему сайту, поэтому я с удовольствием их использую.
Короче говоря:
Если доставка шрифтов в миллисекундах вредит вашему сайту, например, из-за того, что он загружается дольше рекомендованной 1 секунды, я думаю, вам следует разместить их самостоятельно.
источник
<link rel=dns-prefetch href='//fonts.googleapis.com'>
я использую его для аналитики, тепловых карт и поддоменов, по какой-то причине он не зарегистрировался для запуска для внешних веб-шрифтов. И время загрузки сильно отличается от шрифта к шрифту, я полагаю, если вы используете довольно популярный шрифт (может быть кеширован) или только несколько выбранных шрифтов, использование веб-шрифтов - отличный довольно быстрый источник шрифтов. Скоро выложу здесь тесты скорости.Лучше всего импортировать шрифты с помощью ajax, вот так:
Я делаю это на своей веб-странице и получаю 9 баллов в тесте Google Insights.
источник
async
атрибута? То же самое.