0

我正在创建一个指令,该指令根据用户的时区格式化日期。用户可以选择通过页面上的设置下拉菜单更新他们的时区。因此,该指令订阅时区更新和更改更新。

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 多个订阅。

这会导致一次更新大量元素的性能问题吗?我看不到任何文件可以建议任何一种方式。

4

1 回答 1

0

这取决于你如何使用它。通常,ngOnDestroy如果组件被销毁,hook 有助于删除此类订阅。如果您每次都推送新组件而不删除它,是的,它会造成内存泄漏。如果我们销毁组件并重新渲染它,它只会取消订阅,在这种情况下它不会导致任何内存泄漏。

我不确定您如何使用给定的代码,但我建议您使用它pipe来更改视图格式。如果您想保留此格式化日期以供将来使用,则可以使用 subs/pub 模式。

于 2021-09-07T13:39:42.970 回答