botaniQQQ
@botaniQQQ
Q

Как загружать CSS чтобы добиться высокой оценки в Google PageSpeed Insights?

Привет.

Загружаю CSS обычным способом:

<link rel="stylesheet" href="/css/style.css">

Получаю "Удалите из верхней части страницы код JavaScript и CSS, блокирующий отображение".

Файл весит 120 КБ, я полностью удаляю всё с него, делаю его пустым, запускаю Google PageSpeed Insights, он всё равно ругается на него, т.е. ему без разницы сколько он весит, главное чтобы его там не было. Куда его ставить и как вообще загружать CSS?

UPD:

Все предложенные варианты не решают проблему, PageSpeed отслеживает подключение стиля куда бы я его не ставил, будь то в head или в низ страницы и "ругается". Нашел такой вариант, который сделал PageSpeed 100/100:

function rocketCSS(e) {
    var t = new XMLHttpRequest;
    t.onreadystatechange = function(){
        if(4==t.readyState && 200==t.status){
            var e = document.head||document.getElementsByTagName("head")[0];
            var n = document.createElement("style");
            n.type = "text/css";
            n.styleSheet
                ? n.styleSheet.cssText = t.responseText
                : n.appendChild(document.createTextNode(t.responseText));
            e.appendChild(n);
        }
    };
    t.open("GET",e,!0);
    t.send();
}

rocketCSS('/style.css');
  • Вопрос задан
  • 3287 просмотров
Пригласить эксперта
Ответы на вопрос 6
Игнорирую это правило, при этом оценка 94 \ 100. По хорошему, убирать файл стилей из head можно только тогда, когда у вас сгенерирован правильный critical path, т.е. критичные для отображения стили, размещенные инлайново в тэге style. Во всех остальных случаях либо костыли, либо неприятный эффект FOUC (Flash of unstyled content), когда пользователь видит содержимое страницы до того, как стили загрузятся. Так быть не должно.
Ответ написан
Комментировать
@crazyivan_ru
Не забывайте отметить решением, если ответ помог!
В идеале вам нужно собрать все стили в один файл, стили подключать скриптом, например, так:
<script>jQuery("head").append("<link rel="stylesheet" type="text/css" href="/путь_до_файла_стилей.css">");</script>

а все скрипты вставить в конце страницы - прямо перед закрывающим тегом </body>, плюс, если у вас могут быть пользователи с отключенным javascript'ом в браузере (мало ли), нужно будет продублировать подключение файла стилей внутри тегов <noscript></noscript>, например, так:
<noscript><link rel="stylesheet" type="text/css" href="/путь_до_файла_стилей.css" /></noscript>
Ответ написан
aliencash
@aliencash
Партизан
Вам нужно:
1. Выделить из своего большого файла CSS все правила, которые влияют на отображение первой 1000px страницы. Сервис - https://jonassebastianohlsson.com/criticalpathcssg...
2. Разместить этот CSS в HTML-файле, разделе head, между тегами style.
3. Полный CSS-файл загружать с помощью JS размещенного в конце страницы.
var ms=document.createElement("link");ms.rel="stylesheet";ms.href="style.css";document.getElementsByTagName("head")[0].appendChild(ms);


У меня по Google PageSpeed Insights 98/100 по мобильным и десктопам, 100/100 удобство. 2 очка не добрал потому что использую скрипты Я.Метрики и G.Аналитка - ругается на кэширование. Потенциально можно исправить, но в ущерб актуальных версий этих скриптов.
Ответ написан
По рекомендациям Google, его нужно переместить вниз, до вызова JS. Из личного опыта могу сказать, что отображению сайта это не мешает.
Ответ написан
Комментировать
svistiboshka
@svistiboshka
живые веб интерфейсы
либо скриптом добавлять стили, либо в тег
Ответ написан
Комментировать
@crescent
Тоже, как некоторые тут пишут, не рекомендую это делать.

Скорость загрузки от конкретно этой рекомендации не растет, но появляется эффект FOUC (Flash of unstyled content), когда пользователь видит содержимое страницы до того, как стили загрузятся. От этого падает конверсия и увеличаваются отказы. Получаем обратные эффект - гораздо более сильный, чем положительный эффект от pagespeed
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы