Что происходит после формирования DOM

Ответ

После формирования DOM (Document Object Model) браузер начинает процесс рендеринга:

  1. Строится CSSOM (CSS Object Model) - анализируются все стили
  2. Формируется Render Tree - комбинация DOM и CSSOM, исключая невидимые элементы (display: none)
  3. Происходит Layout (Reflow) - вычисляются точные позиции и размеры всех элементов
  4. Paint - отрисовываются пиксели на экране
  5. Composite - слои объединяются в финальное изображение

Пример обработки:

document.addEventListener('DOMContentLoaded', () => {
  // DOM готов, но стили/изображения могут ещё грузиться
});

window.addEventListener('load', () => {
  // Все ресурсы загружены
});

Оптимизация важна на каждом этапе, особенно для сложных SPA.

Ответ 18+ 🔞

А, ну вот, слушай, пока ты тут чай свой попиваешь, браузер-то в это время, сука, целую операцию проводит, как спецназ! Берёт этот твой HTML, который ты ему подсунул, и начинает его разбирать по косточкам, строит DOM — этакую виртуальную модель документа, чтобы понимать, где что лежит.

Дальше начинается самое интересное, ёпта! Он лезет в CSS, и тут его ждёт CSSOM — это типа такая же модель, но только для стилей. Все эти margin: 0 auto, color: #f00 и прочие пиздопроебибны. Он всё это анализирует, как заправский бухгалтер на налогах.

Потом, внимание, хуй с горы! Он скрещивает DOM и CSSOM, и рождается Render Tree — дерево рендеринга. Это уже почти готовый макет, но без всякого скрытого дерьма вроде display: none. Если элемент невидимый — его нахуй выкидывают из этого дерева, чтобы зря время не тратить.

А дальше начинается самая тяжёлая работа — Layout, или, по-нашему, перерасчёт. Браузер начинает судорожно считать, где какой div должен встать, какого он размера, где текст обтекает картинку... Представь, он как инженер с логарифмической линейкой, только в миллион раз быстрее. Этот этап ещё Reflow называют, и если ты его часто вызываешь (например, постоянно меняешь стили в JS), то производительность летит в пизду, братан.

Потом идёт Paint — собственно, рисование. Вот тут уже пиксели на экране начинают загораться. Но и это ещё не конец, ядрёна вошь!

Финальный аккорд — Composite. Браузер берёт все эти нарисованные слои (да-да, он умный, он рисует частями) и склеивает их в одну красивую картинку, которую ты уже видишь в окне. Вот так, чих-пых тебя в сраку, и страница готова!

И чтобы ты, как разработчик, не сидел в неведении, когда что происходит, есть два главных сигнала:

document.addEventListener('DOMContentLoaded', () => {
  // DOM готов, можно тыкать в элементы!
  // Но стили или картинки могут ещё болтаться где-то в сети, имей в виду.
});

window.addEventListener('load', () => {
  // Всё, пиздец, полный комплект!
  // И HTML, и CSS, и все картинки, скрипты, шрифты — всё загружено.
  // Можно выдыхать.
});

Так что если делаешь какую-нибудь навороченную SPA-шечку, помни — оптимизировать нужно на каждом из этих этапов, а то пользователи тебе такую дичь устроят в отзывах, мало не покажется.