chi*_*zui 4 angularjs angularjs-scope angularjs-rootscope
嗨,我想知道在性能方面哪些更好.假设我有这个广播东西的工厂:
angular.module('core.foo')
.factory('Foo',
['$rootScope',
function FooFactory($rootScope) {
$rootScope.$broadcast('bar', baz);
}
]
);
Run Code Online (Sandbox Code Playgroud)
并在某个地方(或很多人)监听该事件.什么会更好?
要使用$ rootScope.$ on:
angular.module('foo').component('foo', {
templateUrl: 'foo.html',
controller: ['$rootScope',
function FooController($rootScope) {
$rootScope.$on('bar', function(event, data){
// use the data
});
}]
});
Run Code Online (Sandbox Code Playgroud)
或$ scope.$ on:
angular.module('foo').component('foo', {
templateUrl: 'foo.html',
controller: ['$scope',
function FooController($scope) {
$scope.$on('bar', function(event, data){
// use the data
});
}]
});
Run Code Online (Sandbox Code Playgroud)
两者都有效,我只是好奇.
我真的不明白为什么这里的人似乎如此着迷于表现.遇到性能问题时,您应该只担心性能问题.否则,它是过早的优化,这是所有邪恶的根源.
在这种情况下,邪恶可能是内存泄漏,以及许多性能问题.
控制器的范围与控制器具有相同的生命周期.另一方面,$ rootScope是一个单身人士.
因此,如果您向根作用域添加一个侦听器,并且在不再需要它时忘记删除它,则会发生内存泄漏.监听器具有对控制器的隐式引用,它具有对其作用域的隐式引用,将保持活动状态,消耗内存并继续无理由地响应事件.
但是,如果向控制器的范围添加侦听器,则当范围和控制器被销毁时,则任何人都将不再引用侦听器,并且所有内容都将被垃圾回收.
因此,首先要努力实现简单性,可维护性,可测试性和正确性.性能不应该是您主要关注的问题.该框架确保使用框架的每种自然的,有文档记录的方式足够快.
| 归档时间: |
|
| 查看次数: |
3877 次 |
| 最近记录: |