2016-10-07 6 views
7

Мне интересно, какое влияние на изменения производительности ниже, чем на шкалы сложности. Часть ответа на этот вопрос (с использованием свойств) уже была рассмотрена в AngularJS : Why ng-bind is better than {{}} in angular?, но я хотел бы понять влияние использования функций вместо свойств.Производительность функций привязки AngularJS

Мне кажется, что со свойствами Angular «знает» в некотором смысле, когда происходит изменение, в то время как функция непрозрачна, поэтому Angular не знал бы и должен был бы оценивать каждый раз. Тем не менее, в соответствии с другим вопросом SO, упомянутым выше, Angular уже оценивает каждый раз с прямым шаблоном в любом случае. Так действительно ли существует штраф за выполнение функции вместо свойства? И каковы плюсы и минусы каждого из них?

1 Прямая шаблонный со свойством

<div>Hello, {{user.name}}</div> 

2 нг-связывания-шаблон со свойством

<div ng-bind-template="Hello, {{user.name}}"</div> 

3 нг-связывания со свойством

<div>Hello, <span ng-bind="user.name"></span></div> 

4 Прямая шаблонный с функцией

<div>Hello, {{GetUserName()}}</div> 

5 нг-связывания-шаблон с функцией

<div ng-bind-template="Hello, {{GetUserName()}}"</div> 

6 нг-связывания с функцией

<div>Hello, <span ng-bind="GetUserName()"></span></div> 
+0

Дополнительные вызовы функций означают дополнительные накладные расходы.Кроме того, вы никогда не хотите использовать функцию, которая запускает запрос async, если это не основано на событиях ... много попыток, хотя – charlietfl

+0

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

+0

@LenilsondeCastro: Вы имеете в виду «... функции должны использоваться, когда привязка приходит из _controller_? –

ответ

0

3) , ng-bind с собственностью

Давайте посмотрим. Лучший выбор - ng-bind='user.name', потому что эта директива просто будет следить за назначенной переменной и обновлять представление, только после того, как она будет изменена.

1). Прямые шаблоны с недвижимостью & 2). нг-связывать-шаблон со свойством

Эти два варианта будут запускающего на каждом $ переваривать цикл освежает. Не требуется ng-bind с выражением или просто выражением, без возможности увеличить скорость, проверив определенное значение.

4), 5), 6)

Теоретически, все эти случаи будут иметь одинаковую скорость, которая будет гораздо медленнее, чем выше примерах. В каждом цикле $ digest он вызывает связанную функцию, что делает это еще медленнее, чем просто выражение.

На практике по-прежнему интересно проверить, насколько это уменьшит скорость в цифрах.