В чем разница между Shadow DOM и Virtual DOM

«В чем разница между Shadow DOM и Virtual DOM» — вопрос из категории Архитектура, который задают на 10% собеседований Frontend Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Shadow DOM — это технология веб-компонентов, которая инкапсулирует стили и DOM-структуру внутри компонента, изолируя их от основного документа. Это позволяет избежать конфликтов стилей и скриптов.

Virtual DOM — это оптимизация в библиотеках (например, React), где создается легковесная копия реального DOM. Изменения сначала применяются к Virtual DOM, затем сравниваются с реальным DOM, и только необходимые обновления применяются к нему, что ускоряет рендеринг.

Пример Shadow DOM:

<template id="my-component">
  <style>p { color: red; }</style>
  <p>Hello, Shadow DOM!</p>
</template>
<script>
  const template = document.getElementById('my-component');
  const shadowRoot = document.createElement('div').attachShadow({ mode: 'open' });
  shadowRoot.appendChild(template.content.cloneNode(true));
  document.body.appendChild(shadowRoot.host);
</script>

Пример Virtual DOM (React):

function App() {
  const [count, setCount] = useState(0);
  return <button onClick={() => setCount(count + 1)}>Clicked {count} times</button>;
}

Разница:

  • Shadow DOM решает проблему изоляции компонентов.
  • Virtual DOM решает проблему производительности при частых обновлениях интерфейса.