AngularJS - 哪个范围的性能更好?Object.key还是一些变量?

The*_*iot 6 javascript performance angularjs

假设我必须存储客户信息,并管理我将$scope在这里使用的双向绑定.所以我的疑问是,哪种方法更好?

$scope.firstname = "foo";
$scope.lastname = "bar";
$scope.cellno = "1234567890";
$scope.email = "foobar@example.com";
Run Code Online (Sandbox Code Playgroud)

要么

$scope.customerDetailsObj = {};
$scope.customerDetailsObj.firstname = "foo";
$scope.customerDetailsObj.lastname = "bar";
$scope.customerDetailsObj.cellno = "1234567890";
$scope.customerDetailsObj.email = "foobar@example.com";`
Run Code Online (Sandbox Code Playgroud)

我一直在想这个,因为我有一个很大的角度应用程序,有时范围观察者数量超过1500.我正在使用镀铬扩展来看看观察者的数量.

请分享您的观点.谢谢.

Dip*_*hah 4

在我看来,按照angularjs 指南,第一种方法(直接绑定到属性)会更有效。指南摘录:

脏检查可以通过三种策略来完成:通过引用、通过集合内容和通过值。这些策略的不同之处在于它们检测到的变化类型及其性能特征。

  • 通过引用监视 (scope.$watch (watchExpression, Listener)) 会在监视表达式返回的整个值切换为新值时检测到更改。如果该值是数组或对象,则不会检测到其内部的更改。这是最有效的策略。
  • 监视集合内容 (scope.$watchCollection (watchExpression,listener)) 检测数组或对象内部发生的更改:添加、删除或重新排序项目时。检测是浅层的 - 它不会触及嵌套集合。观看集合内容比通过引用观看更昂贵,因为需要维护集合内容的副本。然而,该策略试图最大限度地减少所需的复制量。
  • 按值监视 (scope.$watch (watchExpression,listener,true)) 检测任意嵌套数据结构中的任何更改。它是最强大的变化检测策略,但也是最昂贵的。每个摘要都需要完整遍历嵌套数据结构,并且需要将其完整副本保存在内存中。

在此输入图像描述