2016-11-04 70 views
2

嗨,我想知道什么是更好的性能方面。 比方说,我有这样的工厂,广播的东西:

angular.module('core.foo') 
    .factory('Foo', 
    ['$rootScope', 
     function FooFactory($rootScope) { 

     $rootScope.$broadcast('bar', baz); 

     } 
    ] 
); 

而且有地方的组件(或他们中的很多),监听该事件。什么会更好?

使用$ rootScope $上:。

angular.module('foo').component('foo', { 
    templateUrl: 'foo.html', 
    controller: ['$rootScope', 
    function FooController($rootScope) { 

     $rootScope.$on('bar', function(event, data){ 
     // use the data 
     }); 

    }] 
}); 

或$范围$于:

angular.module('foo').component('foo', { 
    templateUrl: 'foo.html', 
    controller: ['$scope', 
    function FooController($scope) { 

     $scope.$on('bar', function(event, data){ 
     // use the data 
     }); 

    }] 
}); 

两个会的工作,我只是好奇。

回答

6

我不明白为什么这里的人们似乎对表现如此痴迷。在出现性能问题时,您应该只关心性能。否则,这是过早的优化,这是所有邪恶的根源。

在这种情况下,邪恶可能是内存泄漏,以及很多性能问题。

控制器具有与控制器具有相同生命周期的范围。 $ rootScope另一方面是一个单身人士。

因此,如果您将侦听程序添加到根作用域,并且在不再需要时忘记删除它,则会发生内存泄漏。监听器对控制器有一个隐式引用,对其范围有一个隐式引用,它将保持活动状态,消耗内存,并继续无故地响应事件。

但是,如果将侦听器添加到控制器的作用域中,那么当作用域和控制器被销毁时,没有人会再引用侦听器,并且所有内容都将被垃圾收集。

因此,首先要努力追求简单性,可维护性,可测试性和正确性。绩效不应该成为您的首要关注点。该框架确保每一种使用框架的自然的,记录的方式都足够快。

相关问题