Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/405.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 angularjs性能最佳实践_Javascript_Angularjs_Coding Style - Fatal编程技术网

Javascript angularjs性能最佳实践

Javascript angularjs性能最佳实践,javascript,angularjs,coding-style,Javascript,Angularjs,Coding Style,我的风格基于,和 根据Miško在49:44的陈述 他说性能取决于两件事: 你有多少装订。 你买的东西多贵啊。应该禁食 我认为这意味着简单和快速。在我的理解中,getter是指服务中的一种方法。但我的情况有点复杂。 那么如何让它变得简单呢?我想不可能改变算法?或者只是调用服务中的内部私有函数?它生效了吗 所以我的问题是: 在服务中的方法上使用getter以避免内存泄漏的最佳实践 我希望有人能解释清楚 生活如何运作 谁能给我解释一下吗? iLife如何在服务中的工厂内方法中对函数工作 它是否也删

我的风格基于,和 根据Miško在49:44的陈述

他说性能取决于两件事: 你有多少装订。 你买的东西多贵啊。应该禁食 我认为这意味着简单和快速。在我的理解中,getter是指服务中的一种方法。但我的情况有点复杂。 那么如何让它变得简单呢?我想不可能改变算法?或者只是调用服务中的内部私有函数?它生效了吗

所以我的问题是: 在服务中的方法上使用getter以避免内存泄漏的最佳实践

我希望有人能解释清楚 生活如何运作

谁能给我解释一下吗? iLife如何在服务中的工厂内方法中对函数工作

它是否也删除了全局变量?即使我使用var,比如当我们返回工厂时?


你的问题或者多个问题相当广泛。你们在这里把多种概念混为一谈,但我会尽力解开你们的谜团

首先是生活。这与角度性能无关。IIFE是一种命名全局范围的方法。因此,最好的做法是使用IIFE,而不是在全局范围内公开可能导致冲突的函数

var globalObj =
    (function(){
      var privateVar = 5;
      function doPrivateFn(x, y){}

      return {
        publicFn: function(x){ doPrivateFn(x, privateVar) };
      }
    })();
现在,唯一暴露在全局范围内的是globalObj,它有globalObj.publicFn

其次,IIFE有时在使用Angular而不是内联匿名函数注册服务或控制器时使用:。factoryMySvc,函数{}:

所有这一切只是在全局范围内隐藏MySvc工厂函数MySvcFactory

最后,使getter快速的关键不是内存泄漏,而是getter函数的计算强度

因此,如果表达式中有绑定,如下所示:

<span>{{getCount()}}</span>
<div ng-show="isUnique(item)">{{item}}</div>
永远不要做这样的事:

<span>{{getCount()}}</span>
<div ng-show="isUnique(item)">{{item}}</div>
因为此函数将在每个摘要周期上运行,有时甚至多次运行。相反,计算唯一性并将结果缓存在某个地方,这样您就可以返回它

<div ng-show="isUnique(item)">{{item}}</div>
$scope.isUnique = function(item){
   for (var i = 0; i < list.length; i++){
     if (item === list[i]) return false;
   }
   return true;
}