【问题标题】:Angular JS : why {{objA.objB.date | date:'dd.MM.yyyy HH:mm'}} takes much time?Angular JS:为什么 {{objA.objB.date | date:'dd.MM.yyyy HH:mm'}} 需要多少时间?
【发布时间】:2017-01-28 03:28:06
【问题描述】:

在 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

问题是为什么这样的评估需要这么长时间?

【问题讨论】:

    标签: javascript angularjs performance batarang


    【解决方案1】:

    我认为这对 Angular 来说是“正常的”,因为一旦发生变化,Angular 在每个 $digest 周期运行每个过滤器(包括日期过滤器)两次。这会影响性能。第一次运行来自 $$watchers 检测任何更改,第二次运行是查看是否还有需要更新值的进一步更改。

    如果您可以更改 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');
    

    【讨论】:

    • 所以你想说所有filters 都非常慢?
    • 并非如此。但是他们每个人都经历了相同的过程。取决于很多事情,即。使用的过滤器数量。
    • 我想我想说的是很多事情都会影响 AngularJS 应用程序的性能。如果性能成为问题,您可以谷歌如何提高 AngularJS 应用程序的性能。关于这个主题有很多很棒的文章。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-07-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-28
    • 2015-10-03
    • 2010-11-09
    相关资源
    最近更新 更多