Angular:使用 $rootScope.$on 与 $scope.$on 来捕获组件中的 $rootScope.$broadcast – 哪个在性能方面更好?
Angular: using $rootScope.$on vs $scope.$on to catch a $rootScope.$broadcast in a component – what is better in terms of performance?
你好,我想知道什么在性能方面更好。
假设我有这个广播东西的工厂:
angular.module('core.foo')
.factory('Foo',
['$rootScope',
function FooFactory($rootScope) {
$rootScope.$broadcast('bar', baz);
}
]
);
并在某处(或许多组件)监听该事件。什么会更好?
要使用 $rootScope.$on:
angular.module('foo').component('foo', {
templateUrl: 'foo.html',
controller: ['$rootScope',
function FooController($rootScope) {
$rootScope.$on('bar', function(event, data){
// use the data
});
}]
});
或$scope.$on:
angular.module('foo').component('foo', {
templateUrl: 'foo.html',
controller: ['$scope',
function FooController($scope) {
$scope.$on('bar', function(event, data){
// use the data
});
}]
});
两者都可以,我只是好奇。
我真的不明白为什么这里的人似乎对性能如此着迷。当您遇到性能问题时,您应该只担心性能。否则就是过早优化,是万恶之源
在那种情况下,邪恶可能是内存泄漏,以及很多性能问题。
控制器具有与控制器具有相同生命周期的作用域。另一方面,$rootScope 是一个单例。
因此,如果您将侦听器添加到根作用域,并且在不再需要时忘记将其删除,就会发生内存泄漏。具有对控制器的隐式引用的侦听器,具有对其范围的隐式引用,将保持活动状态,消耗内存并继续无缘无故地对事件做出反应。
如果您向控制器的范围添加一个侦听器,但是,当范围和控制器被销毁时,那么没有人会再有对侦听器的引用,并且所有内容都将被垃圾收集。
所以,首先要力求简单性、可维护性、可测试性和正确性。性能不应该是您的主要关注点。该框架确保每一种自然的、有记录的使用框架的方式都足够快。
你好,我想知道什么在性能方面更好。 假设我有这个广播东西的工厂:
angular.module('core.foo')
.factory('Foo',
['$rootScope',
function FooFactory($rootScope) {
$rootScope.$broadcast('bar', baz);
}
]
);
并在某处(或许多组件)监听该事件。什么会更好?
要使用 $rootScope.$on:
angular.module('foo').component('foo', {
templateUrl: 'foo.html',
controller: ['$rootScope',
function FooController($rootScope) {
$rootScope.$on('bar', function(event, data){
// use the data
});
}]
});
或$scope.$on:
angular.module('foo').component('foo', {
templateUrl: 'foo.html',
controller: ['$scope',
function FooController($scope) {
$scope.$on('bar', function(event, data){
// use the data
});
}]
});
两者都可以,我只是好奇。
我真的不明白为什么这里的人似乎对性能如此着迷。当您遇到性能问题时,您应该只担心性能。否则就是过早优化,是万恶之源
在那种情况下,邪恶可能是内存泄漏,以及很多性能问题。
控制器具有与控制器具有相同生命周期的作用域。另一方面,$rootScope 是一个单例。
因此,如果您将侦听器添加到根作用域,并且在不再需要时忘记将其删除,就会发生内存泄漏。具有对控制器的隐式引用的侦听器,具有对其范围的隐式引用,将保持活动状态,消耗内存并继续无缘无故地对事件做出反应。
如果您向控制器的范围添加一个侦听器,但是,当范围和控制器被销毁时,那么没有人会再有对侦听器的引用,并且所有内容都将被垃圾收集。
所以,首先要力求简单性、可维护性、可测试性和正确性。性能不应该是您的主要关注点。该框架确保每一种自然的、有记录的使用框架的方式都足够快。