将范围内的所有内容都影响Angular性能吗?

时间:2014-01-27 18:49:39

标签: javascript angularjs

我想知道是否有人在模块内部有使用$ scope vs plain JavaScript对象的建议。例如,我在控制器中有一些变量,为了方便起见我附加到$ scope,但它们可能只是控制器内部的常规对象,没有任何功能差异。

我的问题是,当Angular进入摘要周期以使所有内容都在范围内时,它会影响性能吗?

这是:

$scope.viewpanel = {};
$scope.viewpanel.date = new Date();
$scope.viewpanel.day = $scope.viewpanel.date.format('d');
$scope.viewpanel.week = $scope.viewpanel.date.format('W');
$scope.viewpanel.month = $scope.viewpanel.date.format('m');
$scope.viewpanel.year = $scope.viewpanel.date.format('o');

比这更好还是更坏:

var viewpanel ={};
viewpanel.date = new Date();
viewpanel.day = viewpanel.date.format('d');
viewpanel.week = viewpanel.date.format('W');
viewpanel.month = viewpanel.date.format('m');
viewpanel.year = viewpanel.date.format('o');

1 个答案:

答案 0 :(得分:2)

是的,如果您在模板中使用它会影响性能,模板会自动创建观察者。如果它们不受任何约束,那么它并不重要(增加了一些开销),但很多人不喜欢拥挤的范围。 This wiki article on Scopes will explain exactly what happens when you add something to $scope

另一种选择是bind-once或angular-once。它就像常规绑定,但只设置一次,因此减少了观察者的数量。

此外,对于您的具体示例,您可以考虑使用过滤器来设置日期格式。虽然这对性能本身没有帮助,但它会为您提供更清晰的代码。