PassFront
  1. PassFront
  2. База знаний
  3. Рендеринг и производительность

Что такое Virtual DOM?

Рендеринг и производительность

Virtual DOM — это легковесное представление реального DOM в виде JavaScript-объектов, которое React хранит в памяти и синхронизирует с настоящим DOM.

Зачем он нужен

Прямые операции с реальным DOM дороги: каждое изменение может вызывать пересчёт стилей, layout и перерисовку страницы. React решает эту проблему так:

  • при изменении состояния строится новое виртуальное дерево;
  • новое дерево сравнивается со старым (процесс reconciliation, алгоритм диффа);
  • вычисляется минимальный набор изменений;
  • только эти изменения применяются к реальному DOM одним пакетом.

Как выглядит Virtual DOM

Каждый элемент — обычный объект:

const element = {
  type: 'button',
  props: {
    className: 'primary',
    children: 'Купить',
  },
};

JSX <button className="primary">Купить</button> компилируется в вызов, создающий именно такой объект.

Как работает дифф

  • Элементы разных типов (div → span) — старое поддерево удаляется, новое строится с нуля.
  • Элементы одного типа — обновляются только изменившиеся атрибуты.
  • Списки сравниваются по key — так React понимает, какой элемент переместился, а какой добавился.

Нюансы

  • Virtual DOM — не «быстрее DOM». Это компромисс: дифф тоже стоит ресурсов, но избавляет от ручной оптимизации DOM-операций.
  • Virtual DOM не привязан к браузеру — тот же подход работает в React Native, где вместо DOM обновляются нативные вью.

Коротко для собеседования

Virtual DOM — JS-копия DOM в памяти. При изменении состояния React строит новое дерево, сравнивает со старым и применяет к реальному DOM только минимальный набор изменений. Это делает обновления предсказуемыми и позволяет писать декларативный код без ручной работы с DOM.

Другие вопросы раздела