Middle+
Браузер чӣ гуна файли HTML-ро таҳлил мекунад?
sobes.tech AI
Ҷавоб аз AI
Браузер читає HTML файл байт за байтом. На основі кодування файлу створюється потік символів. Цей потік парситься, формуючи токени (відкриваючий і закриваючий тег, текст, коментар, doctype). Токени перетворюються у вузли (nodes), які зв'язуються у дерево — Document Object Model (DOM).
Процес парсингу проходить наступні етапи:
- Читання байтів: Браузер отримує потік байтів.
- Визначення кодування: Визначається кодування файлу (наприклад, UTF-8, Windows-1251). Це може відбуватися через HTTP-заголовки,
<meta>теги або визначатися автоматично. - Перетворення у символи: Байти перетворюються у символи відповідно до визначеного кодування.
- Токенізація: Потік символів розбивається на токени.
<!-- Приклад токенів --> <p> // Токен: відкриваючий тег "p" Привіт, // Токен: текст "Привіт, " світ! // Токен: текст "світ!" </p> // Токен: закриваючий тег "p" - Побудова AST (дерево DOM): На основі послідовності токенів створюється дерево вузлів (DOM). Браузер підтримує стек відкритих тегів; коли зустрічає закриваючий тег, він закриває відповідний відкриваючий тег зі стеку і додає його вузол у дерево.
<!-- Простий структура DOM для: --> <!DOCTYPE html> <html> <head> <title>Приклад</title> </head> <body> <p>Текст</p> </body> </html> // Дерево DOM матиме структуру, що відображає вкладеність тегів. // Наприклад, вузол "p" буде нащадком вузла "body". - Парсинг скриптів і стилів: Під час парсингу HTML браузер зустрічає теги
<script>і<link>/<style>.<script>: За замовчуванням парсинг HTML призупиняється, скрипт завантажується, парситься і виконується. Після виконання парсинг HTML відновлюється. Атрибутиasyncіdeferзмінюють цю поведінку.asyncвиконує скрипт асинхронно, не блокуючи парсинг.deferвідкладує виконання скрипта до завершення парсингу HTML.<link>/<style>: CSS парситься паралельно з HTML і створює CSS Object Model (CSSOM). Наявність<link>перед<script>може затримувати виконання скрипта, оскільки браузер може чекати на побудову CSSOM, щоб забезпечити правильне застосування стилів до виконання скрипта.