Web 3 хв
Оновлено:

Як відбувається рендеринг Web-сторінки

Коли браузер отримує HTML від сервера, він проходить кілька етапів перед тим, як ви побачите сторінку.

1. Парсинг HTML → DOM

Браузер читає HTML і будує DOM (Document Object Model) — дерево елементів. Кожен тег стає вузлом дерева.

2. Парсинг CSS → CSSOM

Паралельно браузер обробляє CSS і будує CSSOM (CSS Object Model) — дерево стилів.

3. Render Tree

DOM + CSSOM = Render Tree. Це дерево містить тільки видимі елементи. Елементи з display: none сюди не потрапляють.

4. Layout

Браузер розраховує позицію і розміри кожного елемента — де що буде на екрані.

5. Paint

Відмальовування пікселів: кольори, тіні, тексти, картинки.

6. Composite

Шари об’єднуються у фінальне зображення. Елементи з transform або opacity виносяться в окремі шари — це важливо для оптимізації.

Reflow і Repaint

Коли користувач взаємодіє зі сторінкою, браузер може перераховувати layout або перемальовувати елементи.

Repaint — зміна стилів, що не впливають на геометрію: колір, тінь, видимість. Браузер просто перемальовує пікселі.

Reflow — зміна структури або розмірів. Браузер перераховує layout всіх елементів, які залежать від зміненого. Це дорога операція.

Reflow завжди викликає Repaint. Repaint не викликає Reflow.

Що провокує Reflow

ДіяЩо відбувається
Зміна width, height, margin, paddingReflow
Зміна font-sizeReflow
Додавання/видалення елементів з DOMReflow
Зміна displayReflow
Читання offsetWidth, scrollTopПримусовий Reflow
Зміна color, background, box-shadowТільки Repaint
Зміна transform, opacityНі Reflow, ні Repaint (композитинг)

Найгірше — читання геометрії (offsetWidth, clientHeight) після зміни стилів. Браузер змушений робити синхронний Reflow.

Оптимізація

HTML і DOM

Простіший DOM = швидший рендеринг. Уникайте глибокої вкладеності та зайвих обгорток. Якщо сторінка «скаче» з 15 FPS — перше, що варто перевірити.

CSS

Уникайте: складні селектори, масивні анімації властивостей, що провокують Reflow (width, height, top, left).

Для анімацій: використовуйте transform і opacity — вони не викликають Reflow і виконуються на GPU.

css

/* Погано — провокує Reflow */
.box { left: 0; transition: left 0.3s; }
.box:hover { left: 100px; }

/* Добре — тільки композитинг */
.box { transform: translateX(0); transition: transform 0.3s; }
.box:hover { transform: translateX(100px); }

Зображення

Формати: WebP для фото, SVG для іконок.

Розміри: не завантажуйте 4000px картинку для прев’ю 200px.

srcset: адаптивні зображення для різних екранів.

html

<img src="photo.jpg" 
     srcset="photo-480.webp 480w, photo-800.webp 800w" 
     sizes="(max-width: 600px) 480px, 800px">

JavaScript

Мінімізуйте читання геометрії в циклах. Якщо треба — прочитайте все спочатку, потім змінюйте.

javascript

// Погано — Reflow на кожній ітерації
elements.forEach(el => {
  el.style.width = el.offsetWidth + 10 + 'px';
});

// Добре — один Reflow
const widths = elements.map(el => el.offsetWidth);
elements.forEach((el, i) => {
  el.style.width = widths[i] + 10 + 'px';
});

Ресурси

Стиснення: gzip або brotli для HTML, CSS, JS.

Кешування: налаштуйте правильні заголовки Cache-Control.

Сторонні скрипти: кожен додатковий скрипт — це час. Аналітика, чати, віджети — все сповільнює.

Отже

Браузер робить багато роботи: парсинг → DOM → CSSOM → Render Tree → Layout → Paint → Composite.

Reflow — дорога операція, її варто мінімізувати. Анімації через transform і opacity — ваші друзі. Простий DOM, оптимізовані картинки, стиснені ресурси — база швидкої сторінки.

Поділитися:

1 коментар

  1. Tenebries ·

    Дякую за статтю!

Залишити коментар ·