Angular. Functions & getters в шаблонах

Если в шаблоне Angular компонента использовать метод или getter, то он будет выполняться на каждый цикл механизма обнаружения изменений, что может привести к проблемам с производительностью. Цель обнаружения изменений - выяснить, какие части пользовательского интерфейса необходимо перерисовать. Чтобы определить есть изменение или нет, требуется выполнить функцию и сравнить её с текущим результатом.

Применение ChangeDetectionStrategy.OnPush позволяет локализовать проблему на уровне компонента, но не избавится от неё.

Решение

Есть 2 способа.

  1. Результат функции присвоить свойству компонента
  2. Использовать pure pipe (в случае чистых функций можно быть уверенным, что результат не изменился).

Более подробно про pure pipe в материале Faster Angular Applications - Part 2. Pure Pipes, Pure Functions and Memoization или его видеоверсии

Важное замечание

Проблемы с производительностью возникает на большом количестве элементов (несколько тысяч) или на частых перерисовках (realtime графики). Поэтому в большинстве случаев использование методов и getter'ов является адекватным решением.

Небольшое обсуждение такого замечания в twitter


Похожие записи

Как добавить ng-bootstrap компоненты в проект Angular-CLI?

Покажу на примере нового проекта.

ng new project_name
cd project_name
npm install --save bootstrap@next
npm install --save @ng-bootstrap/ng-bootstrap

В angular-cli.json в секцию style надо добавить наш CSS, чтобы глобально подключить стили.

  "styles": [
    "styles.css",
    "../node_modules/bootstrap/dist/css/bootstrap.min.css"
  ],
17 августа 2017 г. в Angular

Отладка Angular в VS Code

Настройка Visual Studio Code используя расширение Debugger for Chrome для отладки Angular приложений
03 декабря 2017 г. в Angular

Angular. Когда не надо отписываться в RxJS?

В async pipe за вас отпишется Angular. Во всех остальных случаях лучше отписываться самостоятельно. Допускается не отписываться в потоках, где будет гарантировано вызван complete.

Angular. Отличие baseHref от deployUrl

  • deployUrl - задаёт путь для статических (js, css) файлов в index.html.
  • baseHref - определяет base, используется в ссылках и маршрутизации (routing) Angular