К основному контенту

Оптимизация CSS


Когда PageSpeed Insights находит на странице внешние таблицы стилей, препятствующие ее отображению на экране, выводится сообщение "Оптимизируйте код CSS".

Браузеры запрашивают внешние файлы CSS перед отображением контента на экране. Это приводит к задержке и замедляет обработку страницы.

Если внешние ресурсы CSS имеют малый объем, их можно вставить непосредственно в документ HTML без подключения внешних файлов. Подобное встраивание позволяет браузеру продолжать загрузку страницы. Обратите внимание: если файл CSS слишком велик, после его встраивания PageSpeed Insights может вас предупредить, что верхняя часть страницы имеет слишком большой объем (правило приоритета видимого контента). Если файл CSS слишком велик, вам необходимо найти код CSS, отвечающий за контент в верхней части страницы и встроить его в HTML, отложив загрузку остальных стилей.

Более того, из-за ограниченного размера пакетов, которыми стороны обмениваются в ходе медленной начальной фазы соединения, ваш бюджет критического CSS составляет около 14 Кб. Если вы его превысите, браузеру понадобится дополнительный roundtrip для получения стилей. Удержаться в рамках бюджета вам помогут CriticalCSS и Critical. Возможно, их придется применять для каждого шаблона типовой страницы.

Пример встраивания небольшого файла CSS

Если документ HTML выглядит следующим образом:
<html>   <head>
    <link rel="stylesheet" href="small.css">
  </head>
  <body>
    <div class="blue">
      Hello, world!
    </div>
  </body>
</html>
а ресурс small.css имеет вид:
  .yellow {background-color: yellow;}
  .blue {color: blue;}
  .big { font-size: 8em; }
  .bold { font-weight: bold; }
то вы можете встроить необходимый код CSS следующим образом:
<html>
  <head>
    <style>
      .blue{color:blue;}
    </style>
    </head>
  <body>
    <div class="blue">
      Hello, world!
    </div>
  </body>
</html>
<link rel="stylesheet" href="small.css">
Оригинальный файл small.css загружается после загрузки страницы. Порядок применения правил CSS определяется путем внедрения всех элементов <style> и <link> в документ с помощью JavaScript.

Не встраивайте URI больших объемов данных

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

Не встраивайте атрибуты CSS

Не следует встраивать атрибуты CSS в элементы HTML (например, <p style="...">), так как это приводит к излишнему дублированию кода. Кроме того, подобное встраивание по умолчанию блокируется правилами по безопасности контента.

Tree Shaking — это способ очистки кода за счёт включения только того, который используется в рабочем проекте. Для исключения лишних неиспользуемых стилей из CSS можно использовать UnCSS или Helium.

Свойство contain

Свойство contain позволяет разработчикам разграничить конкретное поддерево и основное дерево DOM.

Браузер отрисовывает содержимое всех элементов полностью, даже если конкретный элемент не видно при загрузке (вне viewport). При установке свойства contain: paint; браузер может пропустить отрисовку того элемента, который находится «вне области видимости», и поэтому отрисовка остального содержимого происходит быстрее.

Минификация

На сегодняшний день существует целый ряд CSS компрессоров и сравнительная таблица по ним. Утилита Shorthand работает без Gulp и делает приблизительно следующее:
See the Pen JypWQJ by George Wise (@ink-jet) on CodePen.
Минификацию CSS также можно произвести с помощью плагинов gulp, например
Еще инструменты для уменьшения объема CSS YUI Compressor и cssmin.js.

С помощью специального скрипта можно убрать из CSS правила для неиспользуемых селекторов. Как правило исходные файлы не меняются, создаются новые файлы.
Увидеть неиспользуемые селекторы можно на вкладке "Audits" инструментов разработчика.


Еще один похожий скрипт на Python - mincss (код на GitHub).

Для асинхронной загрузки CSS можно использовать специальный скрипт или более простой вариант.

Дополнительные материалы:

Комментарии