Правильная асинхронная загрузка шрифтов Google Fonts

Всем привет!

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

<link  href='https://fonts.googleapis.com/css?family=Open+Sans:400,300,300italic,400italic,600,600italic,700,700italic,800,800italic&subset=latin,cyrillic' rel='stylesheet' type='text/css'>

Делаем все с помощью скрипта fonfaceobserver, который также загружаем асинхронно (весит всего 5 Кб в несжатом виде).

Качаем здесь: https://github.com/bramstein/fontfaceobserver/

Сам скрипт кладем например в папку /JS. Получится, что доступен он по ссылке «ваш сайт»/js/fontfaceobserver.js

Далее в header добавляем вместо ссылки на гугл шрифт (для начала просто закомментируйте его <!— —>)

<!--подключаем шрифт-->
<style>
@import url(//fonts.googleapis.com/css?family=Ваш шрифт и начертания);
/* шрифт по умолчанию, до тех пор пока не подгружен новый шрифт */
.fonts-loaded {
body {
font-family: Ваш шрифт, sans-serif;
}
}

</style>

<script>
var script = document.createElement('script');

script.async = true;
script.src = 'путь_к_скрипту/fontfaceobserver.js';
script.onload = function () {
// инициализация
var font = new FontFaceObserver('Ваш шрифт');

font.load().then(function () {
document.documentElement.className += " fonts-loaded";
});
};
document.head.appendChild(script);
</script>;

<!---------------------->

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

Вот в качестве примера:

<!--подключаем шрифт-->
<style>
@import url(//fonts.googleapis.com/css?family=Open+Sans:400,400i,300,700&amp;subset=cyrillic,latin);

/* шрифт по умолчанию, до тех пор пока не подгружен новый шрифт */
.fonts-loaded {
body {
font-family: Open Sans, sans-serif;
}
}

</style>

<script>
var script = document.createElement('script');

script.async = true;
script.src = 'js/fontfaceobserver.js';
script.onload = function () {
// инициализация
var font = new FontFaceObserver('Open Sans');

font.load().then(function () {
document.documentElement.className += " fonts-loaded";
});
};
document.head.appendChild(script);
</script>

<!---------------------->

Все работает быстро и асинхронно.

Всем добра и чтоб росла борода!))

Поделиться ссылкой: