Що таке Virtual DOM?
Virtual DOM (віртуальний DOM) - це легковаге JavaScript-представлення реального DOM. Vue (як і React) використовує Virtual DOM, щоб ефективно оновлювати інтерфейс, мінімізуючи кількість операцій у реальному DOM.
Простіше кажучи:
Virtual DOM - це копія DOM у пам'яті, яка дозволяє фреймворку обчислити, що потрібно оновити, а чого торкатися не потрібно.
Навіщо потрібен Virtual DOM?
Реальний DOM - дуже повільний для частих змін. Кожна операція:
- викликає перемальовування
- перерахунок стилів
- перерахунок розмірів
- перемальовування layout
Virtual DOM вирішує це так:
- Vue генерує віртуальне дерево (JS-об'єкти)
- При зміні даних Vue створює нове віртуальне дерево
- Vue порівнює старе і нове (diffing)
- Застосовує мінімально необхідні зміни до реального DOM
Як це виглядає?
Був стан -> віртуальне дерево A
Дані змінилися -> віртуальне дерево B
Vue:
- порівняв A і B
- знайшов відмінності
- оновив DOM лише там, де потрібно
Маленький приклад (спрощено)
Старе віртуальне дерево
{
tag: 'p',
children: ['Hello']
}Нове віртуальне дерево
{
tag: 'p',
children: ['Hello, World!']
}Vue розуміє - змінилася лише текстова нода -> оновлює лише текст.
Без Virtual DOM довелося б перемальовувати весь <p>.
Основні переваги Virtual DOM
1. Мінімум операцій з реальним DOM
Саме це робить інтерфейс швидким.
2. Оптимізація оновлень через diff-алгоритм
Vue оновлює лише частини, що змінилися.
3. Простіше думати про UI як про функцію даних
UI = f(state), а Vue сам оновлює DOM, як потрібно.
4. Портованість
Рендерити можна не лише в браузері:
- SSR (Server-Side Rendering)
- NativeScript
- Weex
- canvas тощо.
Тому що Virtual DOM - це абстракція.
Недоліки Virtual DOM (часто запитують!)
- не швидше за ручні (handwritten) DOM-операції
- diff все одно потребує обчислень
- зайва абстракція
Але в 99% випадків плюси переважують мінуси.
Коротка відповідь
Для співбесідиКоротка відповідь допоможе вам впевнено відповідати на цю тему під час співбесіди.