Ответ
Оптимизация критического пути рендеринга ускоряет отображение контента. Основные методы:
-
Минификация и сжатие ресурсов (HTML, CSS, JS)
-
Уменьшение CSS-блокировки:
- Использовать
media-атрибуты (<link media="print">) - Инлайнить критический CSS
- Использовать
<style>/* критичные стили */</style>
- Отложить неключевой JS:
<script defer src="non-critical.js"></script>
-
Приоритезация видимого контента (Lazy Load нижележащих элементов)
-
Оптимизация шрифтов:
font-display: swap- Предзагрузка (
<link rel="preload" href="font.woff2" as="font">)
-
Использование SSR/SSG для быстрого первого рендера
Пример порядка в <head>:
<head>
<meta charset="UTF-8">
<title>Критичный заголовок</title>
<style>/* инлайновые стили */</style>
<link rel="preload" href="font.woff2" as="font">
</head> Ответ 18+ 🔞
Да ты посмотри, какая тема — оптимизация критического пути рендеринга! Это ж, блядь, как доставка пиццы: если курьер будет ебаться с упаковкой на каждом углу, пицца придёт холодной, а пользователь уже в другом табло заказал. Надо, чтобы контент вываливался на экран быстрее, чем я успеваю сказать «в рот меня чих-пых».
Вот, смотри, основные приёмы, чтобы не быть мудаком-разработчиком:
-
Минификация и сжатие всего, что шевелится. HTML, CSS, JS — всё это надо утрамбовать, как чемодан перед отпуском. Убрать все пробелы, комментарии, лишние переносы. Чтобы файлы были не как роман Толстого, а как телеграмма: «ДЕНЬГИ ВЫСЛАЛ ПИЗДЕЦ».
-
Разобраться с CSS-блокировкой. Браузер, сука, такой дотошный — он не станет показывать страницу, пока не прогрузит и не распарсит все подключённые стили. Это пиздец как медленно. Что делать?
- Вешать
media-атрибуты на неключевые стили. Типа<link media="print">— браузер поймёт, что это для печати, и не будет тормозить основной рендер. - Самый важный, критический CSS — инлайнить прямо в
<head>. Да, будет некрасиво, но зато быстро, ёпта!
- Вешать
<style>/* вот эти стили, без которых страница выглядит как пиздец */</style>
- Отложить неключевой JS. Всякие там аналитики, виджеты, соцсети — это же ебушки-воробушки, они могут подождать. Вешай на скрипты
deferилиasync, чтобы они не блокировали отрисовку.
<script defer src="non-critical.js"></script>
-
Приоритезация видимого контента. Зачем грузить двадцать картинок с котиками, которые внизу страницы, если пользователь их ещё не видит? Lazy Load, блядь! Пусть грузятся по мере прокрутки.
-
Оптимизация шрифтов — отдельная песня. Пока кастомный шрифт грузится, текст может быть невидим (FOIT) или дергаться (FOUT). Кошмар!
- Ставим
font-display: swap— пусть сразу покажет системный шрифт, а потом подменит. - Предзагружаем самые важные начертания, чтобы браузер знал, куда бежать.
- Ставим
<link rel="preload" href="font.woff2" as="font">
- Использование SSR/SSG. Если твой сайт — это React-приложение, которое собирается в браузере пользователя, то первый экран он может ждать, как манну небесную. Серверный рендеринг (SSR) или статическая генерация (SSG) отдают уже готовый HTML, и пользователь сразу видит контент. Это овердохуища эффективно.
Вот, смотри, как примерно должен выглядеть правильный <head>, чтобы не позориться:
<head>
<meta charset="UTF-8">
<title>Критичный заголовок</title>
<style>/* инлайновые стили */</style>
<link rel="preload" href="font.woff2" as="font">
</head>
Всё остальное — скрипты, нескритические стили — можно подключать потом. Главное — дать пользователю хоть что-то увидеть в первые полсекунды, а не пялиться на белый экран. Иначе он закроет вкладку с мыслью «ну и пизда этому сайту».