2016-09-20 8 views
3

Вкладка AngularJS инструментов Chrome dev (я использую AngularJS Batarang (стабильный)). У меня есть следующие строки, описывающие какие часы выражения заняла самое высокое время, чтобы оценить (если это выражение называется несколько раз, добавляется время оценки)Угловой JS: почему {{objA.objB.date | date: 'dd.MM.yyyy HH: mm'}} занимает много времени?

{{objA.objB.date | date:'dd.MM.yyyy HH:mm'}} | 20.1% | 1009ms 
{{objA.objB.date | date:'dd.MM.yyyy, HH:mm'}} | 22.8% | 1148ms 

Вопрос заключается в том, почему такая оценка занимает так много времени?

ответ

1

Я думаю, что это «нормальный» для Angular, потому что Angular запускает каждый фильтр (включая фильтр даты) дважды за цикл digest, как только что-то изменилось. Это приносит плоды производительности. Первый запуск - от наблюдателей $$, обнаруживающих любые изменения, второй запуск - это увидеть, есть ли дальнейшие изменения, которые нуждаются в обновленных значениях.

Если вы можете изменить свой DOM фильтр:

{{objA.objB.date | date:'dd.MM.yyyy HH:mm'}} 

использовать поставщик $ фильтра, который вы можете использовать для запуска фильтров в контроллере перед разбором их в DOM вы препроцессировать данные перед отправкой вид, который позволяет избежать этапа анализа DOM и понимания синтаксиса встроенного фильтра:

$scope.theDate = $filter('date')(objA.objB.date, 'dd.MM.yyyy HH:mm'); 
+0

Итак, вы пытаетесь сказать, что все «фильтры» мертвы медленно? – Eugeny89

+0

Не совсем. Но каждый из них проходит один и тот же процесс. Зависит от многих вещей, т.е. количество используемых фильтров. – thepio

+0

Я предполагаю, что я пытаюсь сказать, что многие вещи влияют на производительность приложений AngularJS. Если производительность становится проблемой, вы можете Google улучшить производительность вашего приложения AngularJS. На эту тему много замечательных статей. – thepio