为什么AngularJS中的双向数据绑定是反模式?
AngularJS提供双向数据绑定。为什么AngularJS中的双向数据绑定是反模式?
我建几个AngularJS应用,发现双向绑定是一个强大的功能,是提高我的工作效率。
然而最近我来了越来越多的跨声称双向绑定是一个反帖子和文章。
例子:
- https://medium.com/este-js-framework/whats-wrong-with-angular-js-97b0a787f903#.py84tbylf
- https://www.dotnetrocks.com/?show=1147
- https://www.youtube.com/watch?v=DslsyqnyjQE
- Angular2 two-way data binding
大多数资源的主张,主张 “单向数据流” 就像它是由反应,和/提拔通量。
而且Angular2 announced一段时间不会有双向绑定...但最新文件显示,它实际上是提供two-way databinding via ngModel再次(在上实现性财产和事件结合)
但是我还没有完全理解AngularJS中与双向数据绑定相关的问题。
其他客户端技术(即摆动,Eclipse的RCP,的WinForms,WPF ...)还提供双向数据绑定,我从来没有绊倒的要求,这是一个反模式...
有没有一个规范的例子可以很容易地说明AngularJS中双向数据绑定可能导致的问题?
The video我联系上面似乎暗示$scope.watch
是问题...但例如可以在不$scope.watch
通过结合暴露在$scope
的功能来实现。
如果您避免使用$scope
(即使用controller as
),双向数据绑定仍存在哪些问题?
回答:
实际上,双向数据绑定的主要问题是性能。当开发者AngularJS发布时(1),这个特性成为开发人员广泛使用该框架的首要原因。
如果没有一行代码,您可以通过从模型侧或视图侧更改其值来使元素完全动态化,该值在设置模型的任何位置都会更改。
在这个特性中,最重要的工具是监视,它代表了双向数据绑定的所有问题。
随着应用程序的发展,观察者和观察元素的数量也在增加。
此外,一段时间后,应用程序可以成为观察者的大汤。
这会导致您的应用程序始终监视元素并在反面保持最新的元素,并且会从浏览器中消耗大量资源。
这就是为什么我的建议是:尽量避免看守者。
它们在控制器中几乎从未真正需要。
参见:
- Effective strategies to avoid watches in AngularJS
- The bad parts of AngularJS
- Performances in large AngularJS applications
希望这对您更加清晰。
以上是 为什么AngularJS中的双向数据绑定是反模式? 的全部内容, 来源链接: utcz.com/qa/262959.html