繁体   English   中英

angularjs性能最佳实践

[英]angularjs performance best practices

我采用基于johnpapa风格指南的风格 ,并根据Miško在Angularjs MTV聚会最佳实践的演讲49:44

他说性能取决于两件事:

  1. 你有多少绑定。
  2. 你得到多贵。 (应该快)

我认为这意味着简单快捷。 在我的理解中,getter意味着服务中的方法。 但在我看来有点复杂。 那怎么简单呢? 我是客人,不可能改变算法? 或者只是在服务中调用内部(私有)功能? 它会生效吗?

所以这是我的问题:

  1. 对服务方法进行getter的最佳实践不会导致内存泄漏。

    我希望有人可以用解释做出明确的例子

  2. IIFE如何运作?

    有人可以向我解释一下吗?

  3. IIFE如何处理工厂内的功能(使用中的方法)?

    它也删除了全局变量吗? 即使我使用var,就像我们回工厂一样?

你的问题(或更确切地说是多个问题)相当广泛。 你在这里混淆和组合了多个概念,但我会试着解开你。

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

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

      return {
        publicFn: function(x){ doPrivateFn(x, privateVar) };
      }
    })();

现在,唯一暴露的是全局范围是globalObj ,它具有globalObj.publicFn()

其次 ,在使用Angular而不是内联匿名函数注册服务或控制器时,有时会使用IIFE: .factory("MySvc", function(){})

(function(){
  angular.factory("MySvc", MySvcFactory);

  function MySvcFactory($http){
    // ...
  }
})();

所有这一切MySvcFactory从全局范围隐藏MySvc工厂函数MySvcFactory

最后 ,关于快速获取getter的观点不是内存泄漏,而是getter函数的计算强度。

所以,如果你在表达式中有绑定,就像这样:

<span>{{getCount()}}</span>

或这个:

<div ng-show="isShown(item)">{{item.prop}}</div>

这个想法是让这些功能非常快,如果不是只是一个吸气剂:

$scope.isShown = function(item){
  return (item.a || item.b) && $scope.somethingElse;
}

永远不要做这样的事情:

<div ng-show="isUnique(item)">{{item}}</div>

isUnique执行for循环搜索:

$scope.isUnique = function(item){
   for (var i = 0; i < list.length; i++){
     if (item === list[i]) return false;
   }
   return true;
}

因为这个函数将在每个摘要周期运行,有时甚至多次。 相反,计算唯一性并将结果缓存到某处,以便您可以返回它。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM