Optimize CSS Delivery

271
09 мая 2017, 04:40

Есть стандартная задача - оптимизировать загрузку CSS.

Есть ужатый (/static/CACHE/css/1f37a94c2ab5.css) и есть пару шрифтов, которые загружаются извне.

Со шрифтами я решил так:

<noscript id="deferred-styles">
<link type="text/css" rel="stylesheet" href="{% static 'css/pe-icon-7-stroke.css' %}">
<link type="text/css" rel="stylesheet" href="https://opensource.keycdn.com/fontawesome/4.7.0/font-awesome.min.css" integrity="sha384-dNpIIXE8U05kAbPhy3G1cz+yZmTzA6CY8Vg/u2L9xRnHjJiAK76m2BIEaSEV+/aU" crossorigin="anonymous">    
<link type="text/css" rel="stylesheet" href="https://fonts.googleapis.com/css?family=Pacifico" >
<link type="text/css" rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:400,300,500,700">
</noscript>

и такой скрипт:

<script>
  var loadDeferredStyles = function() {
    var addStylesNode = document.getElementById("deferred-styles");
    var replacement = document.createElement("div");
    replacement.innerHTML = addStylesNode.textContent;
    document.body.appendChild(replacement)
    addStylesNode.parentElement.removeChild(addStylesNode);
  };
  var raf = requestAnimationFrame || mozRequestAnimationFrame ||
      webkitRequestAnimationFrame || msRequestAnimationFrame;
  if (raf) raf(function() { window.setTimeout(loadDeferredStyles, 0); });
  else window.addEventListener('load', loadDeferredStyles);
</script>

Но проблему это не решило. PageSpeed Insights ругается на ужатый файл, т.к. он не обрабатывается этим скриптом.

Но если я засуну и ужатый CSS в <noscript></noscript>, то ругаться будет на все CSS подключения, и при этом есть явная проблема с отрисовкой стилей - сперва загружается белая html страница без стилей, а затем происходит отрисовка.

Подскажите, как это решить правильно?

Заранее спасибо.

Answer 1

Благодаря подсказке @Andrey Fedorov удалось решить проблему, правда частично, следующим образом:

  1. Здесь я получил т.н. critical-path-css.
  2. Далее, следуя инструкции и здравому смыслу, разместил его внутри тегов <head></head>
  3. Весь свой css, включая достаточно увесистый 1f37a94c2ab5.css разместил перед , окружив
  4. Разместил скрипт указанный мною в вопросе выше тэгов <noscript></noscript>

P.S. Так же, на сайте по ссылке есть готовый скрипт, куда нужно вставить линк к *.css, чтобы всё работало как надо.

P.P.S. Теперь ругается на тот же минифицированный файл, но только на десктопе. На мобиле всё отлично.

READ ALSO
Не корректное отображение шрифта с Гугл фонтс

Не корректное отображение шрифта с Гугл фонтс

Здравствуйте! Неожиданно проявилась такая проблема - на мобильном Леново старой модели шрифт на сайте отображается не корректно

335
Вопрос по формам/

Вопрос по формам/

Читал в статье что при создании формы никогда не надо label заменяйте на placeholder, это важное дополнение, но никак не заменаПочему так? Вёдь при...

208
Как сделать прозрачный текст?

Как сделать прозрачный текст?

Мне нужно что бы была кнопка, в которой текст был как фон (те

461
MySQL вернуть если одно из значений true

MySQL вернуть если одно из значений true

Добрый день коллегиВозник вопрос, есть массив ID юзеров По ним необходимо получить массив соответсвующих первому массиву значений в таблице...

269