Я начинаю смотреть на ngrx Store, и я вижу удобство использования Angular async pipe. В то же время я не уверен, является ли использование гравитационной асинхронной трубы массово хорошим выбором.
Я делаю простой пример. Предположим, что в том же шаблоне мне нужно показать разные атрибуты объекта (например, Person), который извлекается из Хранилища.
Частью кода шаблона может быть
<div>{{(person$ | async).name}}</div>
<div>{{(person$ | async).address}}</div>
<div>{{(person$ | async).age}}</div>
в то время как конструктор класса компонента
export class MyComponent {
person$: Observable<Person>;
constructor(
private store: Store<ApplicationState>
) {
this.person$ = this.store.select(stateToCurrentPersonSelector);
}
.....
.....
}
Насколько я понимаю, этот код подразумевает 3 подписки (сделанные в шаблоне через асинхронный канал) на тот же Observable (person$
).
Альтернативой было бы определить 1 свойство (person
) в MyComponent и иметь только 1 подписку (в конструкторе), которая заполняет свойство, например
export class MyComponent {
person: Person;
constructor(
private store: Store<ApplicationState>
) {
this.store.select(stateToCurrentPersonSelector)
.subscribe(person => this.person = person);
}
.....
.....
}
в то время как шаблон использует стандартное связывание свойств (т.е. без асинхронного канала), например
<div>{{person.name}}</div>
<div>{{person.address}}</div>
<div>{{person.age}}</div>
Теперь вопрос
Есть ли разница в производительности между двумя подходами? Является ли массовое использование асинхронной трубы (т.е. Массовым использованием подписки) повлиять на эффективность кода?