Когда браузер получает index.html, он проходит через несколько ключевых этапов для отображения страницы. Этот процесс называется Critical Rendering Path (CRP) — критический путь рендеринга.
<!DOCTYPE html>
<html>
<head>
<title>My App</title>
<link rel="stylesheet" href="styles.css">
</head>
<body>
<div>Hello World</div>
<script src="app.js"></script>
</body>
</html>
<script> или <link> парсинг может блокироваться (если нет атрибутов async/defer для JS или preload для CSS).async/defer).// app.js
document.querySelector('div').style.color = 'red'; // Требует готового DOM
display: none исключаются).div { width: 50%; margin: 10px; } // Браузер пересчитывает % в пиксели
will-change или transform для оптимизации.Стратегии загрузки JS:
async/defer в <script>:
<script src="vendor.js" defer></script> // Выполняется после DOMContentLoaded
Предзагрузка ресурсов:
<link rel="preload" href="critical.css" as="style">
Ленивая загрузка модулей:
// Angular
const routes: Routes = [
{ path: 'admin', loadChildren: () => import('./admin.module') }
];
Server-Side Rendering (SSR):
defer/async для скриптов.P.S. Для проверки CRP используйте Lighthouse или WebPageTest. Оптимальный CRP — это когда First Meaningful Paint происходит за <2 секунды.