Почему двухсторонняя привязка данных в AngularJS является антипаттерном?

AngularJS предлагает двухстороннюю привязку данных.

Я создал несколько приложений AngularJS и обнаружил, что двухсторонняя привязка данных является мощной функцией, которая увеличила мою производительность.

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

Примеры:

Большинство ресурсов утверждают в пользу "Однонаправленного потока данных", как это способствует React/Flux.

Также Angular2 анонсировал в течение некоторого времени, что не будет двусторонней привязки... но последняя документация показывает, что это на самом деле предлагает двустороннюю привязку данных через ngModel (реализован поверх привязки свойств и событий)

Однако я еще не полностью понял проблемы, связанные с двусторонней привязкой данных в AngularJS.

Другие клиентские технологии (т.е. swing, eclipse-rcp, winforms, wpf...) также предлагают двустороннюю привязку данных, и я никогда не спотыкался о том, что это анти-шаблон...

Есть ли канонический пример, который легко иллюстрирует проблемы, которые могут возникнуть в результате двусторонней привязки данных в AngularJS?

Видео, которое я связал выше, похоже, намекает, что проблема $scope.watch... но пример может быть реализован без $scope.watch путем привязки к функции, открытой на $scope.
Если вы избегаете использования $scope (т.е. Используя controller as), какие проблемы остаются с двусторонней привязкой данных?

Ответ 1

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

Когда выпущена функция AngularJS (1), эта функция была главной причиной, по которой разработчики очень использовали структуру.

Без строки кода вы можете сделать элемент полностью динамическим, изменив его значение со стороны модели или стороны вида, значение изменяется везде, где установлена ​​модель.

В этой функции наиболее важным инструментом является просмотр, и он представляет собой проблему с двусторонней привязкой данных.

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

Вот почему моя рекомендация: избегайте наблюдателей как можно больше.
Они почти никогда не нужны в контроллере.

См. также:

Надеюсь, что это станет более ясным для вас.