Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 附加到范围vs控制器范围内的AngularJS方法_Javascript_Angularjs - Fatal编程技术网

Javascript 附加到范围vs控制器范围内的AngularJS方法

Javascript 附加到范围vs控制器范围内的AngularJS方法,javascript,angularjs,Javascript,Angularjs,我开始重新考虑我们已经工作了几个月的项目。在这个过程中,我们已经学到了很多关于角度的知识,其中许多将在重新分解中实现 在这个过程中,我注意到许多附加到$scope的方法,比如控制器。其中一些实际上没有被视图中的任何对象调用或监视,或者除了fire and forget之外的其他操作 所以我开始思考。如果任何视图都不需要某个方法,或者监视其结果,那么不将这些方法附加到$scope,是否会提高性能 例如,在一个控制器中,我异步保存一些数据——触发并忘记这类东西 请问: saveState();

我开始重新考虑我们已经工作了几个月的项目。在这个过程中,我们已经学到了很多关于角度的知识,其中许多将在重新分解中实现

在这个过程中,我注意到许多附加到
$scope
的方法,比如控制器。其中一些实际上没有被
视图中的任何对象调用或监视,或者除了fire and forget之外的其他操作

所以我开始思考。如果任何视图都不需要某个方法,或者监视其结果,那么不将这些方法附加到
$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
}

你刚刚发现了一些非常真实的东西。实际上,我会说这样做是不好的,因为你正在污染范围$作用域上应该只有视图直接需要使用的属性。您可能没有注意到小型应用程序的性能提升,但当您进入50+控制器范围,范围内有数千个数据点时,任何一点点都会有所帮助。我在Coderwall()上写了一篇关于用flame图表分析js的文章。这可能会帮助你得出一些结论

我将您的想法更进一步,为我的控制器创建了一个init负载模型

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:)

谢谢


Jordan

我现在只是在猜测,我猜angular不需要处理控制器的内部函数,但可能会对附加到作用域的函数进行一些处理。因此,实际上,附加到作用域的不需要的函数正在从那些需要的函数中移除处理。看起来不错:)谢谢。所以这是一个很好的经验法则;如果视图未使用或未被监视,则不要将其附加到示波器上?不客气,您已获得它。它不需要在范围内。您知道吗,或者您是否已经测试过,看它是否对性能有很大的实际影响?我可以想象,在作用域上只有少数几个方法可能无关紧要,尽管有许多方法可能无关紧要,但我不希望像您所说的那样,将少数项移出作用域是显而易见的。我的最新项目存在性能问题,减少范围膨胀是我们需要完成的任务之一。实际上,我们与布拉德·格林和伊戈尔·米纳就我们的问题进行了交谈。在那之后,对我们来说,将范围属性限制在视图所需的范围内就成为了一种最佳实践。更不用说,您正在明确您的团队其他成员需要什么和不需要什么。还要注意的是,范围更改并不是性能问题的关键因素,但它有帮助。self=这允许在代码中保存当时的范围。它允许您在无法访问所需范围时使用self.which调用this.which。