WordPress асинхронная загрузка css – Асинхронная загрузка CSS файлов без использования JS: различные способы

Содержание

Как реализовать асинхронную загрузку CSS специально для PageSpeed Insights? — Хабр Q&A

Имеется проект, по которому заказчик хочет получить "зеленые карточки" PageSpeed Insights ( >= 85 баллов). Фронтенд сторона проекта представляет из себя монолитный кусок CSS от старых разработчиков размером ~350 кбайт + 400 кбайт CSS от fancybox, semantic и десятка других фреймворков/непонятно чего. В общем, минифицированные и конкатенированные CSS весят >700 кбайт.
Результаты PageSpeed на данный момент 63 - мобильная и 79 - десктопная версия сайта. Рекомендовано "оптимизировать" и "избежать блокировки" css-файлами при загрузке страницы.
Первое, что было сделано - использование uncss, что в три раза снизило "вес", однако PageSpeed не придал этому значения. Так же был использован популярный метод динамической загрузки css через манипуляции с аттрибутом media:
link href="/css-skin/skin-blue.css" rel="stylesheet" media="none" onload="media='all'"

Но и тут PageSpeed словно игнорирует динамическую загрузку, считая, что рендер все равно не начинается без подгрузки этих файлов.
Ради эксперимента перед изменением media был задан таймаут в 10 секунд. На этот раз голую страницу без CSS PageSpeed принял как родную и дал "зеленые карточки". Естественно, оставлять посетителей без css на 10 секунд не то, что нужно, чтобы угодить PageSpeed. Посоветуйте, как можно решить этот вопрос?
Были испробованы:
1. подгрузка css из js - PageSpeed считает их блокирующими,
2. использование rel=preload (на данное время поддерживается лишь Chrome 50, дает хорошие результаты, но малораспространено),
3. Использование "критического" css - генерируемый утилитой critical инлайновый style дает нужные баллы только на главной странице. На подстраницах он уже не годится + мало баллов.
4. Интересная особенность - из утилиты ngrok хорошо себя показывает способ динамической загрузки через media + onload, а безCSS-ное безобразие на время загрузки прикрывается loader-ом. Однако будучи выгруженным на боевой сервер "динамические" css вновь оказываются "блокирующими"

qna.habr.com

Асинхронная загрузка CSS WordPress – info-effect.ru

Оптимизация сайта

На чтение 2 мин. Опубликовано

Привет ! Мы продолжаем разбирать самые интересные и самые полезные плагины для сайта WordPress ! Сегодня вы узнаете как сделать асинхронную загрузку CSS стилей на сайте WordPress. В настройках плагина вы сможете выбрать какие именно стили добавлять в асинхронную загрузку. Установить плагин WP Async CSS вы сможете прямо из админ-панели WordPress. Перейдите на страницу: ПлагиныДобавить новый, введите название плагина в форму поиска, нажмите Enter, установите и активируйте плагин.

 

WP Async CSS

 

Далее, после установки и активации плагина, перейдите на страницу: Настройки – WP Async CSS. Здесь вам нужно выбрать какие CSS стили вашего сайта должны загружаться асинхронно. Обратите внимание ! На данной странице будут отображаться лишь те стили, которые имеются в исходном коде вашего сайта, стили плагинов, тем, шаблонов и т.д. Если у вас ничего не отображается, значит данный плагин вам не нужен !

 

WP Async CSS

 

Отметьте галочкой стили и нажмите на кнопку Сохранить изменения. Всё готово ! Теперь CSS стили будут загружаться с небольшой задержкой.

Внимание ! На некоторых сайта использование данного плагина может вызвать противоположный эффект. Я проводил эксперимент на одном своём сайте, после включения данного сайта – ответ сервера увеличился на 0,2 секунды. То есть, получается, по моему мнению – не обязательно делать асинхронную загрузку. Попробуйте, может на вашем сайте плагин будет вести себя иначе, о результатах отпишитесь в комментариях !

 

Остались вопросы ? Напиши комментарий ! Удачи !

 

info-effect.ru

что это, скрипты и настройка

Асинхронная загрузка

Асинхронная загрузка – это загрузка, которая позволяет браузеру загружать основной HTML и прочие ресурсы без ожидания загрузки стилей CSS и JavaScript, что существенно ускоряет работу сайта.

Проще говоря, пользователь, посещая ресурс, не дожидается последовательной загрузки всех скриптов и стилей, они подгружаются в конце. Тем самым не тормозя процесс загрузки HTML, который загружается последовательно (строка за строкой) и может долго подгружаться на CSS и JavaScript.

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

Синхронная загрузка JavaScript

По умолчанию JS файлы загружаются следующим образом:

<script src="http://www.site.ru/script.js" type="text/javascript"></script>

Асинхронная загрузка скрипта HTML5

Использование HTML5 позволяет сделать асинхронную загрузку скриптов, благодаря чему страница будет загружаться в разы быстрее. Достаточно для файла JS добавить атрибут defer либо async.

<script defer src="http://www.site.ru/script.js" type="text/javascript"></script>
<script async src="http://www.site.ru/script.js" type="text/javascript"></script>

Чем отличаются атрибуты async и defer?

Применение этих атрибутов в конечном итоге обеспечивает нам загрузку скриптов асинхронным способом. Но зачем тогда создавать два атрибута? Дело в том, что они отличаются выполнением скрипта.

Скрипт, имеющий атрибут defer, будет выполняться относительно других скриптов как и прежде, исключительно после окончательной загрузки и парсинга веб-страницы, но до события загрузки дополнительных ресурсов DOMContentLoaded из document.

При использовании async, скрипт выполнится моментально после его полной загрузки и до загрузки window.

На заметку. Данный механизм актуален не для всех браузеров, в частности, Internet Explorer. Еще он не функционирует, если в script.js есть строки document.write.

Загрузка JavaScript асинхронно скриптом от Google

В отличие от других поисковых систем, Google уделяет огромное внимание скорости загрузки веб-ресурсов. Из-за этого даже качественному сайту, если он загружается медленно, оказаться в ТОПе будет практически нереально.

Во избежание проблем с загрузкой, Google разработал и предложил вебмастерам собственный скрипт, позволяющий загружать JS непоследовательно.

Для его использования достаточно заменить <script src=”…”> на <script extsrc=”…”>, а потом подключить файл extsrc.js. Получится следующее:

<script src="http://extsrcjs.googlecode.com/svn/trunk/extsrc.js"></script>
<script extsrc="...."></script>

Но метод также подходит не для всех, потому что опять-таки неактивен в файлах с document.write.

Универсальная асинхронная загрузка JS

А вот вариант, подходящий всем браузерам (кроме IE 6 и старее, которыми уже практически никто не пользуется), сервисов и даже для document.write.

Во фрагменте страницы, предназначенном для отображения элемента, пропишите блок div и оставьте его пустым:

webmasterie.ru

Асинхронная загрузка CSS WordPress

Привет ! Мы продолжаем разбирать самые интересные и самые полезные плагины для сайта WordPress ! Сегодня вы узнаете как сделать асинхронную загрузку CSS стилей на сайте WordPress. В настройках плагина вы сможете выбрать какие именно стили добавлять в асинхронную загрузку. Установить плагин WP Async CSS вы сможете прямо из админ-панели WordPress. Перейдите на страницу: ПлагиныДобавить новый, введите название плагина в форму поиска, нажмите Enter, установите и активируйте плагин.

 

 

Далее, после установки и активации плагина, перейдите на страницу: Настройки – WP Async CSS. Здесь вам нужно выбрать какие CSS стили вашего сайта должны загружаться асинхронно. Обратите внимание ! На данной странице будут отображаться лишь те стили, которые имеются в исходном коде вашего сайта, стили плагинов, тем, шаблонов и т.д. Если у вас ничего не отображается, значит данный плагин вам не нужен !

 

 

Отметьте галочкой стили и нажмите на кнопку Сохранить изменения. Всё готово ! Теперь CSS стили будут загружаться с небольшой задержкой.

Внимание ! На некоторых сайта использование данного плагина может вызвать противоположный эффект. Я проводил эксперимент на одном своём сайте, после включения данного сайта – ответ сервера увеличился на 0,2 секунды. То есть, получается, по моему мнению – не обязательно делать асинхронную загрузку. Попробуйте, может на вашем сайте плагин будет вести себя иначе, о результатах отпишитесь в комментариях !

 

welcome-pro.ru

видео уроки, инструкции для начинающих

Подробные видеоинструкции WordPress на тему: "WordPress асинхронная загрузка css":


Как увеличить скорость загрузки сайта (оптимизация фронтенда для Google PageSpeed)


Сжатие и объединение скриптов, стилей, html. Ускорение WordPress #2


13 Асинхронная загрузка, функция defer, критический css


Отключение неиспользуемых скриптов, стилей и шрифтов. Ускорение WordPress #1


WordPress: Подгрузка JS и CSS из Footer а не из Head - ЗА 1 МИНУТУ!

wordpressunik.ru

плюсы и минусы разных способов

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

Это связано с тем, что по умолчанию браузеры загружают внешний CSS-файл синхронно — блокируя весь рендеринг страницы, пока CSS-файл загружается и анализируется — и то, и другое вызывает потенциальные задержки. Конечно, по крайней мере часть CSS сайта должна быть загружена до того, как странице будет разрешено начать рендеринг, и для немедленного получения этого начального CSS в браузер, мы рекомендуем встраивание (или HTTP2 сервер-пушинг) CSS. Для сайтов с небольшим общим объемом этого может быть достаточно, но если размер CSS велик (скажем, больше 15–20 КБ), это может улучшить производительность. После разделения менее критичный CSS должен быть загружен в фоновом режиме — то есть асинхронно. В этой статье я постараюсь описать наш предпочтительный способ сделать это, на самом деле он существует уже много лет.

Есть несколько способов асинхронной загрузки CSS, но ни один из них не настолько интуитивен, как вы могли бы ожидать. В отличие от элементов script, для CSS нет атрибутов async или defer, которые можно просто применить к элементу link, поэтому в течение многих лет мы поддерживали проект loadCSS, чтобы немного упростить процесс загрузки асинхронного CSS. Однако в последнее время браузеры стандартизировали свое поведение при загрузке CSS, поэтому специальный скрипт, такой как loadCSS, вероятно, больше не нужен.

Код

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

Практический курс по верстке адаптивного сайта с нуля!

Изучите курс и узнайте, как верстать современные сайты на HTML5 и CSS3

Узнать подробнее

<link rel="stylesheet" href="/path/to/my.css" media="print" onload="this.media='all'">

<link rel="stylesheet" href="/path/to/my.css" media="print" onload="this.media='all'">

Более детально

Эта строка HTML лаконична, но не очень интуитивна, поэтому давайте разберем, что здесь происходит.

Для начала для атрибута media элемента link установлено значение print. print — это type медиа, который указывает «применять правила этой таблицы стилей для печатных носителей», или, другими словами, применять их, когда пользователь пытается распечатать страницу. Следует признать, что мы хотим, чтобы наша таблица стилей применялась ко всем медиа (особенно к экранам), а не только к печати, но, объявив тип медиа, который не соответствует текущей среде, мы можем получить интересный и полезный эффект: браузер загрузит таблицу стилей без задержки рендеринга страницы, асинхронно! Это полезно, но это не все, чего мы хотим. Мы также хотим, чтобы CSS действительно применялся к экранной среде после его загрузки. Для этого мы можем использовать атрибут onload, чтобы установить для media — all по окончании загрузки.

Не можете ли rel = preload сделать то же самое?

Да, аналогично! В последние год или два мы использовали link[rel=preload] (вместо rel=stylesheet), чтобы получить аналогичный шаблон, как указано выше (переключение атрибута rel после загрузки, вместо атрибута media соответственно). Это все еще хорошо работает, однако есть несколько недостатков, которые следует учитывать при использовании preload. Во-первых, поддержка браузерами все еще недостаточна, поэтому необходимо использовать полифилл (такой, как предоставляет loadCSS), если вы хотите полагаться на него для извлечения и применения таблицы стилей в разных браузерах. Что еще более важно, preload выборка файлов происходит очень рано, с наивысшим приоритетом, потенциально лишая приоритета другие важные загрузки, и они могут иметь более высокий приоритет, чем вам на самом деле нужно для некритического CSS.

К счастью, если вам нужна высокоприоритетная выборка, которую дает rel=preload (в браузерах, которые ее поддерживают), вы можете объединить ее с приведенным выше шаблоном, например так:

<link rel="preload" href="/path/to/my.css" as="style"> <link rel="stylesheet" href="/path/to/my.css" media="print" onload="this.media='all'">

<link rel="preload" href="/path/to/my.css" as="style">

<link rel="stylesheet" href="/path/to/my.css" media="print" onload="this.media='all'">

Учитывая простую и декларативную природу приведенного выше кода, мы бы выбрали его вместо полифилла, поэтому подход с переключением медиа print снова является предпочтительным.

Почему бы не использовать вымышленный атрибут media?

Любой, кто следил за нашими работами в течение последних нескольких лет, может вспомнить, что мы использовали значения атрибутов media, такие как «only x», для достижения того же эффекта, что дает «print», предоставляя значение, которое не соответствует ни одной среде, так как x — это бессмысленный тип медиа. Когда браузеры обнаруживают несоответствующие типы медиа, они в настоящее время обрабатывают их одинаково — загружают файл в любом случае. Тем не менее, некоторые команды браузеров начинают рассматривать различие между несоответствующими типами медиа и недопустимыми, теми которые (или вообще не распознаются браузером), и, возможно, не запрашивают файлы, которые связаны с использованием недопустимых типов медиа. Это сломало бы множество существующих реализаций загрузки CSS, так что это маловероятно, но в целях безопасности мы рекомендуем использовать допустимый, но не соответствующий тип, например print.

Вам может не понадобиться loadCSS…

Мы продолжаем поддерживать loadCSS и считаем его полезным в некоторых ситуациях, в частности , для извлечения программно файла CSS с JavaScript, например: loadCSS(«/path/to/my.css»). Если вы уже используете loadCSS или его шаблон полифилл rel=preload, вам не нужно ничего менять. Внутри он использует ту же механику, которая описана в этой статье.

Тем не менее, мы находим, что простой HTML-подход может быть всем, что вам нужно. И часто он просто работает лучше всего. Спасибо за прочтение!

Автор: Scott Jehl

Источник: https://www.filamentgroup.com

Редакция: Команда webformyself.

Практический курс по верстке адаптивного сайта с нуля!

Изучите курс и узнайте, как верстать современные сайты на HTML5 и CSS3

Узнать подробнее

PSD to HTML

Практика верстки сайта на CSS Grid с нуля

Смотреть

webformyself.com

Как можно реализовать асинхронную загрузку CSS?

Загружать CSS так, чтобы не задерживать рендеринг страниц – один из эффективных способов повысить производительность веб-страниц. В этой статье я опишу лучший способ реализации асинхронной загрузки.

Зная, как браузер обрабатывает различные атрибуты тега link, мы можем добиться асинхронной загрузки CSS с помощью короткой строки HTML-кода:

<link rel="stylesheet" href="/path/to/my.css" media="print" onload="this.media='all'">

Атрибуту media элемента link присвоено значение print. Оно указывает применять стили подключенного CSS-файла, когда пользователь хочет распечатать веб-страницу.

При этом таблица стилей должна применяться ко всем элементам страницы, а не только к печатным. Но установив значение media, которое не соответствует текущей среде, можно заставить браузер загрузить CSS без задержки рендеринга страницы – асинхронно!

Также необходимо, чтобы CSS-код применялся к версии файла, отображаемой на экране. Для этого можно использовать атрибут onload, чтобы установить атрибут media в значение all после окончания загрузки.

Последние несколько лет мы использовали link[rel=preload] вместо rel=stylesheet, чтобы реализовать переключение атрибута rel после загрузки вместо атрибута media.

Но этот метод имеет несколько недостатков, которые необходимо учитывать при использовании preload. Не все браузеры поддерживают <link rel=»preload»>. Поэтому для извлечения и применения CSS в разных браузерах нужно использовать полифилл. Такой, как используется в loadCSS.

Кроме этого preload извлекает файлы слишком рано, откладывая загрузку других важных ресурсов. Извлечению файлов отдается слишком высокий приоритет, который не слишком важен для критического CSS.

Но если необходимо высокоприоритетное извлечение, которое обеспечивает rel=preload, его можно объединить с кодом, который мы рассмотрели ранее:

<link rel="preload" href="/path/to/my.css" as="style">
<link rel="stylesheet" href="/path/to/my.css" media="print" onload="this.media='all'">

Этот код прост и понятен, поэтому мы предпочитаем использовать его вместо полифила.

Когда браузеры сталкиваются с неподходящими типами медиа, они обрабатывают их одинаково – загружают файл. Но некоторые браузеры начинают учитывать различие между несоответствующими и недопустимыми типами медиа.  Поэтому они не запрашивают файлы, связанные с использованием недопустимых типов медиа. Но в целях безопасности мы рекомендуем использовать несоответствующее типу содержимого значение атрибута media. Например, print.

Мы продолжаем поддерживать loadCSS и считаем его полезным в некоторых ситуациях. Особенно для программного извлечения CSS-файла из Java Script. Например: loadCSS(«/path/to/my.css»). Если вы уже используете loadCSS или шаблон его полифилла rel=preload, не нужно ничего менять. Он использует ту же технику, которая была описана в этой статье.

Данная публикация представляет собой перевод статьи «The Simplest Way to Load CSS Asynchronously» , подготовленной дружной командой проекта Интернет-технологии.ру

www.internet-technologies.ru

Отправить ответ

avatar
  Подписаться  
Уведомление о