Теория 📔
July 31, 2024
Virtual DOM в Angular
Virtual DOM (виртуальный DOM) — это концепция, используемая в ряде библиотек и фреймворков для повышения производительности веб-приложений при изменении пользовательского интерфейса. Основные принципы Virtual DOM и его взаимодействие с Angular можно объяснить следующим образом:
Что такое Virtual DOM?
- Определение:
- Virtual DOM — это абстрактное представление реального DOM (Document Object Model). Это дерево объектов, представляющее структуру пользовательского интерфейса, которое существует только в памяти.
- Как работает:
- Создание Virtual DOM: При создании или обновлении компонента создается виртуальное дерево, которое представляет текущее состояние UI.
- Сравнение: Когда происходит изменение состояния компонента, создается новое виртуальное дерево, которое затем сравнивается с предыдущим состоянием с помощью процесса, называемого diffing (сравнение).
- Обновление: После сравнения определяются изменения, которые были сделаны, и затем только эти изменения применяются к реальному DOM. Это минимизирует количество операций на реальном DOM, которые могут быть медленными и ресурсоёмкими.
Angular и Virtual DOM
В отличие от React, который активно использует Virtual DOM, Angular (особенно Angular 2 и более поздние версии) не использует Virtual DOM в традиционном смысле. Вместо этого Angular применяет другой подход для управления изменениями в пользовательском интерфейсе:
- Change Detection (Обнаружение изменений):
- Angular использует механизм обнаружения изменений (Change Detection) для отслеживания изменений в данных и обновления DOM. Когда данные в компоненте изменяются, Angular проверяет, нужно ли обновить соответствующие части пользовательского интерфейса.
- Angular использует стратегии обнаружения изменений, такие как DefaultиOnPush, для управления тем, как часто и когда обновляется DOM.
- Иерархия компонентов:
- Каждый компонент в Angular имеет собственный экземпляр детектора изменений, который отслеживает изменения в его данных и при необходимости обновляет DOM.
- Индексация и оптимизация:
- Angular предоставляет возможности для оптимизации, такие как trackByв *ngFor, чтобы избежать повторных операций на DOM при рендеринге списков. Это помогает уменьшить количество изменений в DOM, аналогично тому, как Virtual DOM оптимизирует обновления.
- Angular Ivy:
Сравнение подходов
- Virtual DOM (например, React):
- Создаёт виртуальное представление DOM в памяти.
- Сравнивает виртуальные деревья и применяет минимальные изменения к реальному DOM.
- Оптимизирован для частых и динамических изменений в интерфейсе.
- Change Detection (например, Angular):
Пример из Angular
В Angular, если у вас есть компонент с данным состоянием, который изменяется, Angular будет отслеживать это изменение и обновлять только те части DOM, которые изменились:
@Component({
  selector: 'app-example',
  template: `<div>{{message}}</div>`
})
export class ExampleComponent {
  message: string = 'Hello, World!';
  constructor() {
    setTimeout(() => {
      this.message = 'Hello, Angular!';
    }, 1000);
  }
}