2016-08-18 11 views
10

Co jest lepsze dla wydajności i "drogi kątowej": ma wiele rur asynchronicznych w widoku lub jednego subskrybenta w komponencie z akcją anulowania subskrypcji na Dysroy?Angular 2: wiele rur Async a jedna subskrybować

przykład:

@Component({ 
    template: `<div> {{ post.title }} {{ post.author.name }} {{ post.category.name }} </div>` 
    ... 
    }) 
class AppComponent { 
    public post: Post; 
    public postSubscription; 

    ngOnInit() { 
    postSubscription = someObservable.subscribe((post) => { 
     this.post = post; 
    }) 
    } 

ngOnDestroy() { 
    postSubscription.unsubscribe(); 
} 
} 

lub

@Component({ 
    template: `<div> {{ postTitle | async }} {{ postAuthorName | async }} {{ postCategoryName | async }} </div>` 
    ... 
    }) 
class AppComponent { 
    public postTitle: Observable<string>; 
    public postAuthorName: Observable<string>; 
    public postCategoryName: Observable<string>; 

    ngOnInit() { 
    this.postTitle = someObservable.pluck('title'); 
    this.postAuthorName = someObservable.pluck('author', 'name'); 
    this.postCategoryName = someObservable.pluck('category', 'name'); 
    } 
} 

Odpowiedz

3

Użycie rury | async jest bardziej wydajne, ponieważ kątowe zostaje powiadamiany o zmianach. W pierwszym przykładzie wiązania są sprawdzane w każdym cyklu wykrywania zmian.

+0

Ale jeśli zmienię 'changeDetection' na' ChangeDetectionStrategy.OnPush' oraz w bloku subskrybowania używam 'changeDetector.markForCheck()'? – dakolech

+0

To prawdopodobnie jest to samo, co użycie rury asynchronicznej. –

0

To jest świetne pytanie. Często natknąłem się na decyzję o użyciu wielu rur asynchronicznych dla tego samego obserwowalnego, zamiast subskrybowania OnInit i anulowania subskrypcji onDestroy.