Angular: есть ли у него эквивалент ReactJS Reconciliation?

Прочитав документацию и несколько статей о фазах обнаружения и рендеринга изменений ReactJS и Angular (не AngularJS), я пришел к вопросу, который попытаюсь объяснить через несколько минут.

Как вы, вероятно, читали в документации React (здесь и здесь), существует концепция (если хотите) под названием "Примирение", которая в основном относится на «Алгоритм сравнения» и процесс, который выполняется после вызова методов «рендеринга» и создания деревьев элементов React, и DOM должны быть соответственно обновлены... Как сказано в их документах, React реализует эвристический алгоритм O(n), который сравнивает новую версию виртуального DOM (VDOM) с предыдущей, чтобы эффективно обновлять только те части взгляды, которые действительно изменились.

Но говоря об Angular, как я читал в некоторых статьях, таких как здесь, здесь и здесь, похоже, что Angular, с другой стороны, смотрит только на "bindings", полученные из шаблонов:

Когда компилятор анализирует шаблон, он идентифицирует свойства компонента, связанные с элементами DOM. Для каждой такой ассоциации компилятор создает привязку в виде инструкций. Привязка является основной частью обнаружения изменений в Angular.

а потом:

После создания привязок Angular больше не работает с шаблоном. Механизм обнаружения изменений выполняет инструкции, которые обрабатывают привязки. Задача этих инструкций — проверить, изменилось ли значение выражения со свойством компонента, и при необходимости выполнить обновления DOM.

поэтому, чтобы обернуть это:

Обработка привязок, которые выполняют грязные проверки и обновляют соответствующие части DOM, являются основными операциями обнаружения изменений в Angular.

(из третьей ссылки)

Итак, мой вопрос: можем ли мы сказать, что Angular достигает такого же повышения производительности, как React, когда он запускает обнаружение изменений исключительно для «bindings», а не для всего вновь созданного шаблона/VDOM, что устраняет необходимость в оптимизированный алгоритм сравнения?

Или есть какой-то другой момент в обнаружении изменений Angular, который реализует такую ​​​​эффективность?


person GHB    schedule 31.10.2018    source источник


Ответы (1)


можем ли мы сказать, что Angular достигает аналогичного прироста производительности... тем самым устраняя необходимость в оптимизированном алгоритме сравнения

Да

На самом деле в React не так много оптимизации. Он просто сравнивает тип возвращенных дочерних элементов и отбрасывает дерево. Сравнение с ключами более сложное. Я бы сказал, что Angular выполняет обнаружение изменений быстрее, потому что все дочерние элементы известны во время компиляции, но React более гибок, поскольку вы можете каждый раз возвращать совершенно новый дочерний элемент. В Angular есть целая куча концепций, которые вам нужно знать, чтобы динамически изменять или удалять дочерние элементы. В React это просто вопрос возврата другого потомка из метода render.

person Max Koretskyi    schedule 01.11.2018