2014-01-30 30 views
0

将函数添加到$ scope并且不需要在$ scope上有一个主要的性能好处吗?

例如:

function myCtrl($scope){ 
    $scope.myFunc = function(){ 
     // my function on scope 
     var four = myHelperFunc(2); 
     return four; 
    } 

    function myHelperFunc(number){ 
     // my helper function 
     return number * 2; 
    } 
} 

对:

function myCtrl($scope){ 
    $scope.myFunc = function(){ 
     // my function on scope 
     var four = $scope.myHelperFunc(2); 
     return four; 
    } 

    $scope.myHelperFunc = function(number){ 
     // my helper function on scope 
     // is this better than the previous example? 
     return number * 2; 
    } 
} 
+0

我怀疑表现会比微不足道。你只是给范围另一个变量留意。如果您需要扩展应用程序以注意特定范围,那么稍后可能会有用。 – sksallaj

回答

2

首先是更好,它将使用词法作用域。第二个将在堆上使用对象状态存储器。随着对象数量的增加,您将消耗更多的内存,以保持参考$scope.myHelperFunc。总而言之,我建议不要担心这一点,最好是编写干净的代码来表达你在做什么。在这个例子中,性能差异非常小,它取决于客户端的实际供应商的JS引擎实现,这是您无法真正控制的。除非...它是服务器端代码。

+0

谢谢你这么详细的回答@pid,我主要关心的是当你在一个角度应用程序中更改控制器时,当前作用域被破坏,但是不在作用域上的函数是否仍然占用内存? – Cameron

+0

这取决于JS引擎。我可以想象,Google的V8(用于Chromium,因此* Chrome *浏览器)会尽可能长时间地将编译后的函数保存在内存中,这是一件好事。小的处理程序,因为它们占用了数百个字节(可能数千个,但不是更多)。因此,在一款低端智能手机上,128 MB内存(今天不算太多),这是海洋中的一小部分。性能方面,V8将这些字节保存在内存中可节省大量CPU时间。 – pid

0

后者没有性能优势。最后,一个函数仍然被调用。不同的是你是否希望你的帮助函数能够从UI中调用。在$范围内,您可以对控制访问的控制器内的代码进行编码,并且只能从您的函数中调用它。与性能相比,它更像是API可见性问题。

相关问题