gpt4 book ai didi

angularjs - Angular : using $rootScope. $on vs $scope.$on 捕获组件中的 $rootScope.$broadcast – 在性能方面哪个更好?

转载 作者:行者123 更新时间:2023-12-03 15:58:28 26 4
gpt4 key购买 nike

嗨,我想知道在性能方面什么更好。
假设我有一个广播东西的工厂:

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
});

}]
});

两者都可以,我只是好奇。

最佳答案

我真的不明白为什么这里的人似乎对性能如此着迷。只有在遇到性能问题时才应该担心性能。否则,就是过早优化,这是万恶之源。

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

Controller 具有与 Controller 具有相同生命周期的作用域。另一方面,$rootScope 是一个单例。

因此,如果您向根作用域添加一个监听器,并且在不再需要它时忘记将其删除,则会发生内存泄漏。监听器对 Controller 有一个隐式引用, Controller 有一个对其作用域的隐式引用,它将保持事件状态,消耗内存,并无缘无故地继续对事件使用react。

但是,如果您在 Controller 的作用域中添加一个监听器,那么当作用域和 Controller 被销毁时,没有人将再拥有对监听器的引用,并且所有内容都将被垃圾收集。

因此,首先要争取简单性、可维护性、可测试性和正确性。性能不应该是您最关心的问题。该框架确保使用该框架的每一种自然的、记录在案的方式都足够快。

关于angularjs - Angular : using $rootScope. $on vs $scope.$on 捕获组件中的 $rootScope.$broadcast – 在性能方面哪个更好?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40426537/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com