【发布时间】:2015-04-27 23:47:15
【问题描述】:
我正在尝试更好地了解新的代码库,但没有找到大量关于所做选择的性能影响的信息(或者我可能没有完全理解我所阅读的内容) .以前的维护者无法提供洞察力。
每个控制器都设置为在使用此模式最初呈现之前发出其数据请求:
$routeProvider.when('/path', {
resolve: { someMethod: function($q) {
var deferred = $q.defer();
.... do some stuff ...
return deferred.promise;
}
});
然后将其注入控制器 - 这部分是有意义的,据我了解,它的性能更高,因为您通过等待数据首先通过来保存摘要。加载状态默认显示并在我们消化时删除。
注入参数的值——在本例中为someMethod——然后分配给this.someModel。
在整个控制器中,剩余的方法和属性都是用this.doStuff = function() { ... }、this.property = 'some string'等设置的。
最后,通过像这样设置$watchCollection 来设置手表并为$scope 提供属性:
$scope.$watchCollection(angular.bind(this.someModel, function() {
return this;
}), function(newTitle, oldTitle) {
if (newTitle.title !== oldTitle.title)
{
self.updateThings(newTitle);
}
});
我知道它将手表的上下文绑定到this 的当前上下文,然后使用$watchCollection 观察其属性的变化,这将对其顶级属性执行浅层引用检查。
根据this article,我知道在模板中使用{{ property }} 的属性会导致它们被监视,但在这种情况下,直到它们绑定到$watchCollection 才会被监视。
当然,这比使用$watch 并将true 传递给可选的对象相等参数要便宜,但是从性能的角度来看,它比将东西直接放在$scope 上更好还是更差?为什么,具体来说?
我以前从未见过这样的做法,所以任何可以让我更好地理解的读物、见解或事情都将不胜感激。
【问题讨论】:
-
对我来说看起来很难看,如果需要监视对象,它应该是范围的一部分,然后只是
$scope.$watchCollection("someModel", ...)。性能将是相同的。当你问is it better than putting onto $scope你到底是什么意思?如果您的意思是我所说的,那么性能是平等的。
标签: javascript angularjs performance