Какие знаешь способы оптимизации критического пути рендеринга

Ответ

Оптимизация критического пути рендеринга ускоряет отображение контента. Основные методы:

  1. Минификация и сжатие ресурсов (HTML, CSS, JS)

  2. Уменьшение CSS-блокировки:

    • Использовать media-атрибуты (<link media="print">)
    • Инлайнить критический CSS
    <style>/* критичные стили */</style>
  1. Отложить неключевой JS:
    <script defer src="non-critical.js"></script>
  1. Приоритезация видимого контента (Lazy Load нижележащих элементов)

  2. Оптимизация шрифтов:

    • font-display: swap
    • Предзагрузка (<link rel="preload" href="font.woff2" as="font">)
  3. Использование SSR/SSG для быстрого первого рендера

Пример порядка в <head>:

<head>
  <meta charset="UTF-8">
  <title>Критичный заголовок</title>
  <style>/* инлайновые стили */</style>
  <link rel="preload" href="font.woff2" as="font">
</head>

Ответ 18+ 🔞

Да ты посмотри, какая тема — оптимизация критического пути рендеринга! Это ж, блядь, как доставка пиццы: если курьер будет ебаться с упаковкой на каждом углу, пицца придёт холодной, а пользователь уже в другом табло заказал. Надо, чтобы контент вываливался на экран быстрее, чем я успеваю сказать «в рот меня чих-пых».

Вот, смотри, основные приёмы, чтобы не быть мудаком-разработчиком:

  1. Минификация и сжатие всего, что шевелится. HTML, CSS, JS — всё это надо утрамбовать, как чемодан перед отпуском. Убрать все пробелы, комментарии, лишние переносы. Чтобы файлы были не как роман Толстого, а как телеграмма: «ДЕНЬГИ ВЫСЛАЛ ПИЗДЕЦ».

  2. Разобраться с CSS-блокировкой. Браузер, сука, такой дотошный — он не станет показывать страницу, пока не прогрузит и не распарсит все подключённые стили. Это пиздец как медленно. Что делать?

    • Вешать media-атрибуты на неключевые стили. Типа <link media="print"> — браузер поймёт, что это для печати, и не будет тормозить основной рендер.
    • Самый важный, критический CSS — инлайнить прямо в <head>. Да, будет некрасиво, но зато быстро, ёпта!
    <style>/* вот эти стили, без которых страница выглядит как пиздец */</style>
  1. Отложить неключевой JS. Всякие там аналитики, виджеты, соцсети — это же ебушки-воробушки, они могут подождать. Вешай на скрипты defer или async, чтобы они не блокировали отрисовку.
    <script defer src="non-critical.js"></script>
  1. Приоритезация видимого контента. Зачем грузить двадцать картинок с котиками, которые внизу страницы, если пользователь их ещё не видит? Lazy Load, блядь! Пусть грузятся по мере прокрутки.

  2. Оптимизация шрифтов — отдельная песня. Пока кастомный шрифт грузится, текст может быть невидим (FOIT) или дергаться (FOUT). Кошмар!

    • Ставим font-display: swap — пусть сразу покажет системный шрифт, а потом подменит.
    • Предзагружаем самые важные начертания, чтобы браузер знал, куда бежать.
    <link rel="preload" href="font.woff2" as="font">
  1. Использование 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>

Всё остальное — скрипты, нескритические стили — можно подключать потом. Главное — дать пользователю хоть что-то увидеть в первые полсекунды, а не пялиться на белый экран. Иначе он закроет вкладку с мыслью «ну и пизда этому сайту».