簡體   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