【发布时间】:2017-06-02 03:23:05
【问题描述】:
我开始关注 ngrx Store,我看到了使用 Angular 异步管道的便利。同时我不确定是否大量使用 Angular 异步管道是一个不错的选择。
我举一个简单的例子。假设在同一个模板中,我需要显示从 Store 中检索到的对象(例如 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$)。
另一种方法是在 MyComponent 中定义 1 个属性 (person),并且只有 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>
现在的问题
这两种方法在性能方面有什么不同吗?大量使用异步管道(即大量使用订阅)会影响代码的效率吗?
【问题讨论】:
-
您可能需要考虑在容器中对“哑”组件的输入使用异步管道。查看
example-app和Presentational and Container Components 中的组件和容器。