Що таке DOM і як браузер перетворює HTML на структуру сторінки?


1. Що таке DOM простими словами і навіщо браузеру взагалі створювати його?
DOM (Document Object Model / Об'єктна модель документа) — це об'єктне, програмне представлення HTML-документа у вигляді дерева об'єктів.
Браузер створює DOM із завантаженого з сервера HTML-коду для того, щоб програма (зокрема JavaScript) мала змогу швидко й динамічно маніпулювати вмістом сторінки: шукати потрібні елементи, додавати нові, змінювати текст, атрибути, CSS-стилі та реагувати на дії користувача.
2. Чим HTML-код сторінки відрізняється від DOM, який створює браузер?
HTML-код — це статична «сира» текстова розмітка (або «креслення»), яка надходить від сервера у вигляді файлу з тегами. Сам по собі HTML-код є незмінним і не може реагувати на дії відвідувача.
DOM — це жива, динамічна об'єктна модель у оперативній пам'яті браузера, сформована на основі прочитаного HTML. У DOM кожен тег, атрибут і текстовий фрагмент перетворюються на окремий об'єкт із власними властивостями та методами, які можна редагувати за допомогою JavaScript у реальному часі без перезавантаження всієї сторінки.
3. Що відбувається після того, як браузер отримує HTML від сервера?
Отримання байтового потоку (HTML bits): Сервер надсилає дані у вигляді послідовності байтів (0 та 1).
Токенізація (Tokenization): Токенаізер перетворює байти на окремі зрозумілі символи/токени (наприклад, відкриваючі й закриваючі теги).
Парсинг та побудова DOM-дерева: HTML-парсер обробляє токени й будує ієрархічне DOM-дерево. Паралельно завантажуються та обробляються стилі для побудови CSSOM.
Формування Render Tree: DOM та CSSOM об'єднуються у дерево рендерингу (Render Tree), куди потрапляють виключно видимі на екрані елементи.
Layout (Reflow) та Paint: Браузер обчислює точну геометрію, розміри та позицію кожного елемента, після чого растризує (малює) пікселі на екрані.
Виконання JavaScript: Скрипти виконуються та можуть у реальному часі змінювати структуру DOM-дерева.
4. Що таке HTML parsing і як під час нього формується DOM tree?
HTML parsing (парсинг) — це процес послідовного зчитування та аналізу HTML-коду рядок за рядком, при якому кожен тег, атрибут та текстовий елемент перетворюються на відповідний об'єкт (вузол) у пам'яті.
Під час парсингу браузер враховує вкладеність тегів і створює між ними ієрархічні зв'язки. Якщо код містить помилки або пропущені теги, браузер виконує автокорекцію: він самостійно обгортає вміст у теги <html> чи <body>, якщо їх немає, або додає обов'язковий тег <tbody> у таблиці.
5. Що таке node та element у DOM?
Node (вузол) — це найзагальніший базовий тип об'єкта в DOM-дереві. Вузлом у DOM є абсолютно все: сам документ (Document), елементи (Element), текстові фрагменти (Text), коментарі (Comment), атрибути (Attr) та навіть директива DOCTYPE.
Element (елемент) — це конкретний тип вузла (Element Node з nodeType === 1), який відповідає безпосередньо HTML-тегам (наприклад, <div>, <p>, <a>, <span>). Кожен елемент є вузлом, але не кожен вузол є елементом (наприклад, текстовий вузол #text чи коментар #comment є вузлами, але не є елементами).
6. Що означають parent, child і sibling у структурі DOM?
Ці терміни описують відносні ієрархічні зв'язки між вузлами в дереві:
Parent (батьківський вузол): вузол, всередині якого безпосередньо міститься інший вузол (наприклад, <body> є батьком для <main>).
Child (дочірній вузол): вузол, розташований безпосередньо всередині батьківського (наприклад, <h1> є дитиною для <header>).
Sibling (сусідній вузол / «брат» чи «сестра»): вузли, що лежать на одному рівні вкладеності й мають одного спільного безпосереднього батька (наприклад, <header> та <main> усередині <body>).
7. Як виглядає DOM-дерево для простої HTML-сторінки?
Для сторінки з елементами html, head, title, body, header, h1, main, p ієрархія DOM має такий вигляд:
Document (корінь усього документа)
DocumentType: html
Element: <html> (кореневий елемент / root node)
Element: <head>
Element: <title>
Text: "Заголовок вкладки"
Element: <body>
Element: <header>
Element: <h1>
Text: "Головний заголовок"
Element: <main>
Element: <p>
Text: "Основний текст сторінки"
(Примітка: у реальному DOM між елементами також створюються проміжні текстові вузли #text, які містять пробіли та перенесення рядків з HTML-коду).
8. Як JavaScript знаходить, читає, додає, змінює або видаляє елементи DOM?
Знаходження елементів:
document.getElementById('id') — найшвидший пошук за унікальним атрибутом id.
document.querySelector('selector') / querySelectorAll('selector') — універсальний пошук за будь-яким CSS-селектором.
document.getElementsByClassName() / getElementsByTagName() — пошук за класом або назвою тегу.
Читання та зміна контенту й стилів:
element.textContent або element.innerHTML — зчитування чи перезапис тексту/HTML.
element.setAttribute('attr', 'val') / getAttribute() — керування атрибутами.
element.style.color = 'red' або element.classList.add('active') — зміна зовнішнього вигляду.
Створення та додавання:
document.createElement('tagName') — створення нового елемента.
parent.appendChild(child) / append() / prepend() — вставка елемента в потрібне місце дерева.
Видалення:
element.remove() або parent.removeChild(child) — повне вилучення вузла з DOM-дерева.
9. Чим початковий HTML може відрізнятися від фінального DOM після виконання JavaScript?
Автоматичні виправлення: Браузер на етапі парсингу додає закриваючі теги чи відсутні контейнери (наприклад, <tbody> у таблицях).
Динамічні маніпуляції: Скрипти JavaScript можуть створювати нові блоки, видаляти елементи, модифікувати класи, атрибути або переписувати вміст сторінки на льоту.
Завантаження даних (AJAX / SPA): В односторінкових додатках (SPA) початковий HTML може містити лише один порожній <div id="root"></div>, а весь решта вмісту будується в DOM через JavaScript після запиту даних із сервера.
Різниця між атрибутами та властивостями: Наприклад, якщо користувач вводить текст у поле <input value="default">, значення властивості DOM-об'єкта (input.value) змінюється на нове, але початковий атрибут HTML (getAttribute('value')) залишається старим.
10. Чому розуміння DOM важливе для frontend, rendering, accessibility та technical SEO?
Frontend & JavaScript: DOM є програмним містком (API) між JavaScript та візуальним інтерфейсом. Без розуміння DOM неможливо створювати інтерактивні веб-додатки та обробляти події користувачів.
Rendering & Performance: Зміна елементів у DOM змушує браузер виконувати операції Reflow (Layout) та Repaint. Неоптимальна робота з DOM уповільнює сайт; знання таких інструментів, як DocumentFragment, дозволяє групувати оновлення й уникати просідання швидкості.
Accessibility (Доступність): Асистивні технології (наприклад, екранні читачі для людей з вадами зору) аналізують саме DOM-дерево для озвучення вмісту й забезпечують навігацію з клавіатури.
Technical SEO: Пошукові роботи (Googlebot) сканують підсумковий DOM після виконання JavaScript. Якщо важливі посилання, метатеги або текстовий контент відсутні у DOM-дереві чи генеруються із затримкою/помилками, це перешкоджає коректній індексації та ранжуванню сторінки в пошукових системах.
Продовжуйте навчання
Останні матеріали цього курсу

Що таке Package Manager? Пояснюємо принципи роботи пакетних менеджерів та головні відмінності між популярними інструментами npm, pnpm і yarn.

Дізнайтеся, як працює збірка проєктів за допомогою Webpack, Vite чи інших збирачів. Чому build-процес є обов'язковим для сучасного сайту.

Дізнайтеся відмінності між Client-Side, Server-Side, Static Generation та Incremental Static Regeneration. Що обрати для сучасного веб-проєкту.

Дізнайтеся, як працюють статичні та динамічні сайти. У чому переваги й недоліки кожного типу архітектури для бізнесу, швидкості та підтримки.
Обговорення та запитання (0)
Поки що тут немає запитань або коментарів. Будьте першим, хто розпочне обговорення.