在Chrome开发工具的AngularJS
标签中(我正在使用AngularJS Batarang
(稳定))。我有以下几行,描述哪些监视表达式花费最多时间来评估(如果一个表达式多次调用,则添加评估时间)
{{objA.objB.date | date:'dd.MM.yyyy HH:mm'}} | 20.1% | 1009ms
{{objA.objB.date | date:'dd.MM.yyyy, HH:mm'}} | 22.8% | 1148ms
问题是为什么这样的评估花了这么多时间?
答案 0 :(得分:1)
我认为"正常"对于Angular,因为一旦某些内容发生变化,Angular每个$ digest周期运行两次过滤器(包括日期过滤器)。这会对性能造成影响。第一次运行是从$$观察者检测到任何变化,第二次运行是为了查看是否还有需要更新值的更改。
如果您可以更改DOM过滤器:
{{objA.objB.date | date:'dd.MM.yyyy HH:mm'}}
使用$ filter提供程序,您可以使用它在控制器中运行过滤器,然后将它们解析到DOM中,然后在将数据发送到视图之前对其进行预处理,从而避免了解析DOM和理解内联过滤器的步骤语法:
$scope.theDate = $filter('date')(objA.objB.date, 'dd.MM.yyyy HH:mm');