В один прекрасный день, когда я разговаривал с Sesh, он сказал: Нам нужно начать писать Framework, а не изучать Framework. Это предложение вызвало у меня энтузиазм при написании этого поста.

Я работаю над разработкой приложений React уже год. Если кто-то попросит меня объяснить, что такое виртуальный DOM, я точно смогу, тогда как если меня попросят создать виртуальный DOM, я скажу НЕТ. Но теперь это заставило меня задуматься о написании моей собственной виртуальной модели DOM.

P.S. В этом посте ничего не говорится о React Virtual DOM. Речь идет о моей истории попытки реализовать минимальную виртуальную модель DOM с использованием Plain JS.

Перед этим вот краткое введение. DOM - это объектно-ориентированное представление HTML, которое может быть изменено с помощью JS (DOM Manipulation). Иногда нам может потребоваться изменить макет и перерисовать дерево DOM, что дорого и влияет на производительность.

Для этого Facebook использует Virtual DOM (облегченную копию реальной DOM) для React. Всякий раз, когда контент изменяется, эти изменения сначала вносятся в Virtual DOM. Затем React сравнит обновленный виртуальный DOM с текущим Virtual DOM и применит только патчи к фактическому DOM, тем самым уменьшив дополнительную работу по рисованию.

Чтобы опробовать мою виртуальную модель DOM, я собираюсь создать цифровые часы со следующими требованиями.

  • Время обновляется каждую секунду.
  • Час Минутный разделитель и цвет (реквизит) разделителя минут и секунд обновляются каждую секунду.
  • Текст будет отображаться внизу всякий раз, когда значение секунд делится на 5.

Разобьем задачу на простые задачи,

  1. Создал виртуальный объект DOM и отрендерил его в DOM.
  2. Обновите виртуальную модель DOM, сравните ее с текущей виртуальной моделью DOM и создайте список исправлений.
  3. Примените эти исправления к DOM.

Примечание. Я использую инструмент Chrome Paint Flashing для отслеживания и проверки перекраски.

Задание 1:

Я определил структуру Virtual DOM и построил простой пользовательский интерфейс Digital Clock.

Затем написал функцию, которая преобразует виртуальный объект DOM JS в объект DOM.

И визуализируйте этот преобразованный объект DOM.

Задача 2:

Обновите данные, свойства и макеты виртуальной DOM в соответствии с требованиями. И напишите функцию, чтобы сравнить ее с текущей виртуальной DOM и сгенерировать список исправлений.

Задача 3:

Примените изменения патча к DOM браузера согласно сгенерированному списку патчей. Та-Даааааааа

Посмотрите код здесь:



Написанный Virtual DOM не идеален. Но, написав, мы получили представление о том, как это работает.

В некоторые дни вам просто нужно создать свой собственный солнечный свет.

Спасибо за чтение! ❤️. Дайте мне знать, что вы думаете по этому поводу.

Изображение предоставлено: Фотография Сергея Жумаева из Pexels