我开始重新考虑我们已经工作了几个月的项目。一路上已经有很多关于Angular的知识,其中许多都将在重新分解中实现。
在此过程中,我注意到很多方法附加到控制器的$scope
。其中一些实际上并未被view
中的任何内容调用或被观看过,或者除此之外还做其他任何事情而不是开火而忘记。
所以它让我思考。如果任何视图不需要某个方法,或者观察其结果,那么通过不将这些方法附加到$scope
可以获得任何性能提升吗?
例如,让我们说,在一个控制器中,我异步地保存了一些数据 - 点火并忘记那些东西。
会这样:
saveState();
function saveState(){
// do my saving here. don't need to return anything
}
给我带来任何性能提升:
$scope.saveState();
$scope.saveState = function(){
// do my saving here. don't need to return anything
}
答案 0 :(得分:2)
你刚刚发现了一些非常真实的东西。我实际上说这样做是不好的,因为你正在污染范围。 $ scope应该只有一个直接需要由视图使用的属性。您可能不会注意到较小的应用程序的性能提升,但是当您进入50+控制器范围并且范围内有数千个数据点时,一点点都可以提供帮助。我在Coderwall(https://coderwall.com/p/nsanaa?i=1&p=1&q=author%3Abreck421&t%5B%5D=breck421)写了一篇关于js profiling with flame chart的文章。它可能会帮助你在结论中加上一些数字。
我更进一步思考了我的控制器的初始加载模型。
MyApp.controller('MyController', ['$scope', function ($scope) {
var self = this;
this.init = function () {
this.setScope();
this.load();
};
this.load = function () {
this.setScopeEvents();
};
this.setScope = function () {
$scope.isLovingStackOverflow = true;
};
this.setScopeEvents = function () {
$scope.answerQuestion = function() { /* answer a question */}
};
this.init();
}]);
这样的美妙之处在于你可以从单元测试中调用任何这个。*函数。
我想对你的思想过程改变表示赞赏。在不久的将来,Angular还有更多:)
谢谢,
约旦