[英]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.