Zaczynam patrzeć na Ngrx Store i widzę wygodę użycia rurki asynchronicznej Angular. W tym samym czasie nie jestem pewien, czy użycie masywnej rury asynchronicznej jest dobrym wyborem.NgrxStore i Angular - Użyj rury asynchronicznej masowo lub zasubskrybuj tylko raz w konstruktorze.
Podam prosty przykład. Załóżmy, że w tym samym szablonie muszę pokazać różne atrybuty obiektu (np. Osoby), które są pobierane ze Sklepu.
kawałek kodu szablonu może być
<div>{{(person$ | async).name}}</div>
<div>{{(person$ | async).address}}</div>
<div>{{(person$ | async).age}}</div>
podczas gdy konstruktor klasy komponent miałby
export class MyComponent {
person$: Observable<Person>;
constructor(
private store: Store<ApplicationState>
) {
this.person$ = this.store.select(stateToCurrentPersonSelector);
}
.....
.....
}
O ile mi zrozumieć ten kod oznacza 3 subskrypcje (wykonane w szablonie za pomocą async pipe) do tego samego Observable (person$
).
Alternatywą byłoby określenie 1 właściwość (person
) w MyComponent i mają tylko jeden zapis (w konstruktora), która wypełnia właściwości, takie jak
export class MyComponent {
person: Person;
constructor(
private store: Store<ApplicationState>
) {
this.store.select(stateToCurrentPersonSelector)
.subscribe(person => this.person = person);
}
.....
.....
}
gdy szablon wykorzystuje standardowe wiązania właściwość (to znaczy bez rury asynchronicznej), takie jak
<div>{{person.name}}</div>
<div>{{person.address}}</div>
<div>{{(person.age}}</div>
się pytanie
Czy między dwoma podejściami występuje różnica w wydajności? Czy masowe użycie asynchronicznej rury (tj. Masowe wykorzystanie subskrypcji) wpłynie na wydajność kodu?
Dzięki jest z góry za wszelkie wytyczne
Możesz rozważyć użycie rury asynchronicznej w kontenerach na wejściach dla "głupich" komponentów. Zobacz komponenty i kontenery w [przykładowej aplikacji] (https://github.com/ngrx/example-app/tree/master/src/app), a także [* Elementy prezentacji i kontenera *] (https://medium.com/@dan_abramov/smart-and-dumb-components-7ca2f9a7c7d0). – cartant