Есть ли какая-либо разница, когда мы используем выражения в html по сравнению с вызовом функции, которая использует это выражение?

#javascript #angularjs

#javascript #angularjs

Вопрос:

у нас есть компонент, в котором мы используем ngIf для отображения или скрытия компонента на основе условия. Мы можем сделать это двумя способами .. 1) *ngIf="a == b"...... 2) *ngIf="checkforequivalence()".....

Есть ли какая-либо разница в этих реализациях? Мое основное внимание уделяется тому, какой из них является лучшим с точки зрения производительности реализации? и будут ли ситуации, когда нам нужно одно поверх другого?

Комментарии:

1. Я думаю, что производительность с точки зрения производительности почти одинакова, но если вы используете функцию, у вас есть преимущества в том, что вы можете делать более сложные вещи внутри нее.

Ответ №1:

Angular размывает границы между тем, что такое html и что такое javascript. Все это проходит через компилятор, поэтому я серьезно сомневаюсь, что от этого так или иначе будет какой-либо прирост производительности, если он и есть, то это будут доли миллисекунд.

На самом деле это зависит от вас, где вы включаете логику. В этом случае с ngIf для меня имело бы смысл выбрать ваш вариант 1, просто потому, что, когда кто-то придет, чтобы прочитать ваш код, он будет прописан прямо там для них, и им не придется искать какую-то другую функцию.

При этом (для решения более общего вопроса в названии) Я столкнулся с проблемами, когда попытался использовать сложную логику и функции прямо внутри html. Я думаю, что я пытался что-то сделать с помощью onClick и объявлял работу прямо там, в html, и это не сработало. Но когда я обернул это в функцию и перенес на свою страницу javascript, она работала нормально.

TL; DR

Улучшения производительности незначительны, используйте свой первый вариант для удобства чтения и обслуживания кода

Ответ №2:

Короткий ответ: в вашем примере разницы нет.

Длинный ответ: Обычно можно сказать, что производительность приложения angular зависит от digest времени цикла — все выражения в ng-if вычисляются при каждом дайджесте. Время, необходимое для оценки, т.Е. a == b a != 1 amp;amp; b == c Является некоторой небольшой константой, и это очевидно для того, кто читает / изменяет ваш код, но время, необходимое для оценки foo(a, b) , зависит от этой функции. Поэтому рекомендуется вообще не использовать функции в таких местах. (Вы, конечно, имели в виду использовать функции в директивах ng-click, ng-enter и т. Д.)