Sobes.tech
Middle+

Браузер чӣ гуна файли HTML-ро таҳлил мекунад?

sobes.tech AI

Ҷавоб аз AI

Браузер читає HTML файл байт за байтом. На основі кодування файлу створюється потік символів. Цей потік парситься, формуючи токени (відкриваючий і закриваючий тег, текст, коментар, doctype). Токени перетворюються у вузли (nodes), які зв'язуються у дерево — Document Object Model (DOM).

Процес парсингу проходить наступні етапи:

  1. Читання байтів: Браузер отримує потік байтів.
  2. Визначення кодування: Визначається кодування файлу (наприклад, UTF-8, Windows-1251). Це може відбуватися через HTTP-заголовки, <meta> теги або визначатися автоматично.
  3. Перетворення у символи: Байти перетворюються у символи відповідно до визначеного кодування.
  4. Токенізація: Потік символів розбивається на токени.
    <!-- Приклад токенів -->
    <p> // Токен: відкриваючий тег "p"
      Привіт, // Токен: текст "Привіт, "
      світ! // Токен: текст "світ!"
    </p> // Токен: закриваючий тег "p"
    
  5. Побудова AST (дерево DOM): На основі послідовності токенів створюється дерево вузлів (DOM). Браузер підтримує стек відкритих тегів; коли зустрічає закриваючий тег, він закриває відповідний відкриваючий тег зі стеку і додає його вузол у дерево.
    <!-- Простий структура DOM для: -->
    <!DOCTYPE html>
    <html>
      <head>
        <title>Приклад</title>
      </head>
      <body>
        <p>Текст</p>
      </body>
    </html>
    
    // Дерево DOM матиме структуру, що відображає вкладеність тегів.
    // Наприклад, вузол "p" буде нащадком вузла "body".
    
  6. Парсинг скриптів і стилів: Під час парсингу HTML браузер зустрічає теги <script> і <link>/<style>.
    • <script>: За замовчуванням парсинг HTML призупиняється, скрипт завантажується, парситься і виконується. Після виконання парсинг HTML відновлюється. Атрибути async і defer змінюють цю поведінку. async виконує скрипт асинхронно, не блокуючи парсинг. defer відкладує виконання скрипта до завершення парсингу HTML.
    • <link> / <style>: CSS парситься паралельно з HTML і створює CSS Object Model (CSSOM). Наявність <link> перед <script> може затримувати виконання скрипта, оскільки браузер може чекати на побудову CSSOM, щоб забезпечити правильне застосування стилів до виконання скрипта.