Angular: есть ли у него эквивалент ReactJS "Примирение"?

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

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

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

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

а потом:

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

Итак, чтобы обернуть это:

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

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

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

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

1 ответ

Решение

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

да

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

Другие вопросы по тегам