[英]angularjs performance best practices
我采用基於johnpapa風格指南的風格 ,並根據Miško在Angularjs MTV聚會最佳實踐的演講49:44
- 你有多少綁定。
- 你得到多貴。 (應該快)
我認為這意味着簡單快捷。 在我的理解中,getter意味着服務中的方法。 但在我看來有點復雜。 那怎么簡單呢? 我是客人,不可能改變算法? 或者只是在服務中調用內部(私有)功能? 它會生效嗎?
- 對服務方法進行getter的最佳實踐不會導致內存泄漏。
我希望有人可以用解釋做出明確的例子
- IIFE如何運作?
有人可以向我解釋一下嗎?
- 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.