Загрузка...
Загрузка...
Parsing Pipeline — это процесс преобразования байтов HTML/CSS в структуры данных (DOM и CSSOM), с которыми может работать браузер. Понимание этого процесса критически важно для оптимизации производительности загрузки страниц.
Bytes: 3C 68 31 3E ...
↓ (Character Encoding)
Characters: <h1>Hello</h1>
Character Encoding Detection:
charset=utf-8<meta charset="utf-8">HTML parser
преобразует символы в токены:
<div class="container">
<h1>Title</h1>
<p>Text</p>
</div>
Токены:
StartTag: div (attributes: class="container")
StartTag: h1
Character: Title
EndTag: h1
StartTag: p
Character: Text
EndTag: p
EndTag: div
Токены преобразуются в DOM nodes и строится DOM tree:
Preload Scanner работает параллельно с HTML parser и предзагружает ресурсы:
<html>
<head>
<!-- Parser здесь -->
<link rel="stylesheet" href="style.css">
<script src="app.js"></script>
</head>
<body>
<img src="hero.jpg"> <!-- Preload Scanner уже нашёл это! -->
Что находит Preload Scanner:
<link rel="stylesheet"><script src><img src><link rel="preload">body {
color: blue;
font-size: 16px;
}
Токены:
Selector: body
Property: color
Value: blue
Property: font-size
Value: 16px
CSS блокирует рендеринг!
<head>
<link rel="stylesheet" href="style.css"> <!-- Блокирует! -->
</head>
<body>
<!-- Контент не отрисуется, пока CSS не загрузится -->
Решение — Media Queries:
<link rel="stylesheet" href="print.css" media="print"> <!-- Не блокирует экран -->
<link rel="stylesheet" href="mobile.css" media="(max-width: 600px)">
DOM + CSSOM = Render Tree
<div style="display:none">Hidden</div>
<div class="visible">Visible</div>
Render Tree содержит только видимые элементы:
display: none — не в Render Treevisibility: hidden — в Render Tree (занимает место)<head>, <script>, <meta> — не в Render TreeСовременные браузеры используют спекулятивный парсинг:
<script src="slow.js"></script> <!-- Блокирует парсинг -->
<img src="image1.jpg">
<img src="image2.jpg">
Без Speculative Parsing:
<script>Со Speculative Parsing:
<script>image1.jpg, image2.jpg и начинает загружать!CSS блокирует рендеринг. Используйте critical CSS inline для первого экрана.
Не блокируйте парсинг. <script defer> не блокирует.
Используйте <link rel="preload"> для критических ресурсов.
Полностью ломает Speculative Parsing!
Итог:
Parsing Pipeline — сложный многоступенчатый процесс с множеством оптимизаций (Preload Scanner, Speculative Parsing). Понимание этого процесса помогает писать HTML/CSS, который загружается быстрее.