【发布时间】:2021-11-04 09:26:27
【问题描述】:
我正在创建一个指令,该指令根据用户的时区格式化日期。用户可以选择通过页面上的设置下拉菜单更新他们的时区。因此,该指令订阅时区更新和更新更新。
ngOnInit() {
this.timezoneUpdatedSubscription = this.commonService.timezoneUpdated.subscribe(() => {
this.el.nativeElement.innerHTML = moment(this.localDate).tz(this.commonService.usersTimezone).format(this.format);
})
}
ngOnDestroy() {
if (this.timezoneUpdatedSubscription) {
this.timezoneUpdatedSubscription.unsubscribe();
}
}
可能的问题是该指令可能会在一个页面上使用很多次,可能会使用 50 次,但有时可能会使用 200 多次。这意味着一次可能有 200 多个订阅。
这会导致一次更新大量元素的性能问题吗?我看不到任何文件可以建议任何一种方式。
【问题讨论】:
-
如果您的意思是订阅/取消订阅的最佳做法是什么,那么代码看起来不错。如果使用此指令的所有元素的父组件都相同,那么您可以在组件级别订阅一次,然后将您的解决方案转换为
pipe,然后将时区传递给pipe。 -
抱歉澄清了这个问题 - 我的意思更多的是一次更新大量元素的性能
-
在性能方面,您应该禁用默认运行的角度变化检测。它可以为您节省大量与性能相关的调整。如果您使用任何状态管理库,这将很容易。
标签: angular rxjs rxjs-subscriptions