Большинство людей не занимаются программированием вручную. Вы, вероятно, используете какую-то систему управления контентом, такую как WordPress. В этом случае у вас есть пара проблем, которые нужно решить
- Вы имеете дело с большим количеством страниц
- Вы не можете эффективно добавлять разные Critical CSS на каждую страницу
- Ваш веб-сайт может загружать множество различных таблиц стилей CSS.
Решения
Вот как мы справляемся с этими проблемами
- Вы имеете дело с большим количеством страниц – многие страницы создаются с помощью некоторой формы шаблонов. Сосредоточьтесь на разделении шаблонов на группы и выясните, на каких страницах можно использовать один и тот же Critical CSS.
- Невозможно эффективно добавить различный Critical CSS на каждую страницу – компьютеры хорошо справляются с пакетной обработкой. Пусть машины сделают работу за Вас.
- На вашем веб-сайте может быть загружено множество различных таблиц стилей CSS – старайтесь не делать этого. Это замедляет работу вашего сайта, а это плохо для бизнеса. Если вы используете рабочий процесс Sass, объедините все эти файлы CSS в один. Тогда у вас есть только один основной файл CSS, из которого вы можете извлечь критический CSS, и только один файл CSS, который нужно переместить в нижнюю часть страницы.
Наш рабочий процесс… Gulp + Penthouse = Kapow!
Мы используем Gulp – набор инструментов JavaScript – для автоматизации множества надоедливых задач, связанных с веб-разработкой. Создание критического CSS снова и снова каждый раз, когда есть изменение стиля, которое влияет на содержимое над сгибом, может, мягко говоря, раздражать. Так что Gulp – идеальный инструмент для автоматизации процесса.
Для создания Critical CSS мы изначально использовали генератор CriticalCSS от Filament Group, и это здорово. Я не историк, но Filament Group, похоже, вышла на сцену одной из первых. Однако репозиторий обновляется нечасто.
Йонас Олссон Аден (помните его, он разработал потрясающий + бесплатный Critical Path CSS Generator) указал нам на Penthouse, созданный им для Critical CSS. Это быстрее, чаще обновляется. Мы перешли на Penthouse, чтобы выполнить тяжелую работу по созданию Critical CSS. В Penthouse есть масса отличной документации с примерами от простой реализации до пакетирования множества страниц за раз.
Эта установка работала как жемчужина для создания множества критических CSS:
-
Добавьте Penthouse через npm в
package.json
зависимости:"dependencies": { "penthouse": "^1.4.0" }
-
Добавьте к
gulpfile.js
требованиям следующее:var penthouse = require("penthouse"); var fs = require('fs'); var urlList = require('./criticalcss-pagelist.json')
-
Добавьте следующий вариант в файл
gulpfile.js
. Мы пишем вывод в виде файлов PHP, обертывающих CSS, так как мы собираемся вставлять критический CSS для каждой страницы в<head>
раздел через PHP, но вы можете настроить его в соответствииfs.writeFileSync()
со своими потребностями. Ниже приведены все варианты, но вам, конечно, не нужно включать их все.gulp.task('criticalcss',function(){ urlList.urls.forEach(function(item,i){ penthouse({ url: item.link, css: './css/style.min.css', width: 1300, height: 900, keepLargerMediaQueries: false, forceInclude: [ '.keepMeEvenIfNotSeenInDom', /^.regexWorksToo/ ], propertiesToRemove: [ '(.*)transition(.*)', 'cursor', 'pointer-events', '(-webkit-)?tap-highlight-color', '(.*)user-select' ], userAgent: 'Penthouse Critical Path CSS Generator', puppeteer: { getBrowser: undefined, } }) .then(criticalCss => { fs.writeFileSync('./'+item.name+'.php'," "); }) .catch(err => { }) }) })
-
Добавьте список URL-адресов для анализа и список файлов для записи, добавив вариант этого в
criticalcss-pagelist.json
файл. Это"link"
страница, которую нужно проанализировать на наличие критического CSS на основе конфигурации в вашем файле,gulpfile.js
и"name"
это имя файла, содержащего верхний критический CSS для вывода для каждой соответствующей страницы. В этом случае мы ссылаемся на локальные страницы, но вы можете использовать живые страницы (хотя это медленнее).{ "urls": [ { "link": "https://local-alexwright.net/", "name": "criticalcss/home" }, { "link": "https://local-alexwright.net/westlake-plastic-surgery/", "name": "criticalcss/portfolio-project" }, { "link": "https://local-alexwright.net/free-seo-analysis/", "name": "criticalcss/seo-analysis" }, { "link": "https://local-alexwright.net/free-seo-analysis-report/", "name": "criticalcss/seo-analysis-results" } ] }
Стоит отметить, что при одновременном запуске большого количества страниц в Penthouse может истечь время ожидания. Ознакомьтесь с этим отличным справочником, чтобы получить информацию о пакетной обработке запусков Penthouse, чтобы ваш бедный компьютер не взорвался.
-
Беги
gulp criticalcss
и наблюдай, как компьютеры делают то, в чем они хороши – много работы -
При необходимости добавьте каждый сгенерированный критический элемент CSS в
<head>
каждую страницу. Мы находимся в рабочем процессе WordPress, поэтому мы добавляем вheader.php
файл что-то вроде этого<?php if( is_front_page() ): get_template_part( 'criticalcss/home' ); elseif( in_category( 13) ): get_template_part( 'criticalcss/portfolio-project' ); elseif(is_page (382) ): get_template_part( 'criticalcss/seo-analysis' ); elseif(is_page (384) ): get_template_part( 'criticalcss/seo-analysis-results' ); else: endif ?>
Другой вариант сделать это в рабочем процессе WordPress – использовать
wp_head()
крючок действия вfunctions.php
add_action( 'wp_head', 'criticalcss'); function criticalcss() { if( is_front_page()) { get_template_part( 'criticalcss/home' ); } else if( in_category( 13) ) { get_template_part( 'criticalcss/portfolio-project' ); }... }
Хотя это работает отлично, первое решение, состоящее в добавлении условных тегов непосредственно в заголовок, позволяет поднять критические файлы CSS выше в разделе заголовка, что лучше, поскольку браузер быстрее добирается до критических файлов CSS.
-
Затем мы используем Autoptimize, чтобы, помимо прочего, отложить наш единственный основной
style.css
файл в нижний колонтитул. Другой вариант, или если вы хотите сделать это вручную, вы можете использовать loadCSS Filament Group (который использует Autoptimze). Даже большие и сложные веб-сайты могут получить 95 и выше в Google PageSpeed Insights (попробуйте запустить этот веб-сайт с помощью этого инструмента ).
Вы используете высококлассный рабочий процесс Critical CSS? Или все это вообще не имеет смысла? Вы пьете пиво или кофе? Дайте нам знать об этом в комментариях. И особая огромная благодарность Йонасу Олссону Адену за всю его работу над Penthouse и за то, что он предложил большие изменения в этом посте, в том числе внесение поправок.
Обновление
Обновлен включает новую функциональность Penthouse – спасибо Йонасу Олссону Адену. Он работает над новым способом группировки более крупных серий генерации критического CSS, и мы обновим этот пост этими деталями, когда они появятся.