在这个问题中,this vs $scope 的区别已经被清楚地解答了。我正在参与的一个项目中,我们的高级开发人员正在推广使用 this
,并声称它提供更好的性能。
我试图找到任何支持这种说法的证据,但官方的 Angular 文档在这个问题上提供的信息非常有限。
请问:
- 相比于
$scope
,this
是否提供更好的性能(假设我不使用$watch
等)? - 如果是,具体原因是什么?性能提升是否足够显著,可以让现有使用
$scope
的应用程序转换为this
?
在这个问题中,this vs $scope 的区别已经被清楚地解答了。我正在参与的一个项目中,我们的高级开发人员正在推广使用 this
,并声称它提供更好的性能。
我试图找到任何支持这种说法的证据,但官方的 Angular 文档在这个问题上提供的信息非常有限。
请问:
$scope
,this
是否提供更好的性能(假设我不使用 $watch
等)?$scope
的应用程序转换为 this
?AngularJS的性能受当前加载视图(页面)使用的绑定数量和您使用$watch
手动设置的观察器的影响。
所有这些绑定只适用于在$scope上声明的属性。
这意味着,如果您不将属性绑定到视图或不监视它,则最好不要在$scope上声明它(也称避免污染$scope)。
关于this
,如SO帖子中所解释的那样,当Angular调用它时(例如在ng-click的情况下),它具有不同的上下文,并且当控制器创建时也是如此。
因此,您在控制器中声明的任何内容(当引用控制器时)在技术上都无法绑定到视图,因为它没有在作用域上声明。
但是,Angular提出了一个controller as
语法,使我们可以在控制器对象上使用属性和方法。在这种情况下,通过ctrl.prop
语法将控制器中声明的属性绑定到视图。
当您执行ng-controller='HomeController as ctrl'
时,Angular内部会执行以下操作:
$scope.ctrl=this
这基本上意味着Angular将完整的控制器对象附加到$scope上,因此与控制器属性的绑定有效。
因此,在性能方面唯一重要的是被观察的绑定数量。
this
和$scope
之间没有性能优势! - Yogeshthis
或 $scope
定义的。如果您在作用域上定义了许多属性却从未使用它们,则不会影响性能。 - Chandermani$scope
而不是this
会更好吗?如果我理解正确,如果“控制器”语法将整个“this”公开到$scope
中,那么与我们仅在需要时在控制器中声明$scope
的方法相比,是否会导致更多的$scope
污染? - NeelAngularJS可以互换使用它们,因此在性能方面没有区别。
但是,与$scope
相比,使用this
应该会降低一些性能(甚至不会降低太多),因为this
会创建一个新的对象实例。
但是,实际上使用this
更加优雅,因为:
假设您没有手表,它不应该创建性能障碍。
在我看来,您的controller
上不应该有任何"this"方法或属性。
controller
是视图的好朋友,应该只有相关的属性。
相关属性是您将在视图中绑定的属性(属性、函数等)。
所有"this"属性都应该放在一个service
中。
this
而不是$scope
,因为这样当您使用$watch
或类似功能时,它会提醒您该控制器出于某种原因接受了$scope
,否则您往往会忽略它的存在。此外,如果可用,人们倾向于使用诸如$scope.$apply
之类的东西-如果不可用,他们会找到“更好”的方法。在性能方面,可能没有任何好处。 - Kyle Muir