首页 文章

在Angular 5中处理许多订阅的想法

提问于
浏览
0

我正在开发一个具有单元格网格的应用程序,用户可以从3个容器中拖动对象 . 网格由行组件组成,每个行组件具有5个用于存储对象的单元组件 . 每个单元组件订阅2个可观察对象:

  • 当用户修改对象的名称时会发送一个,因此我们必须在网格中查找它的所有实例并更改其名称 .

  • 当用户想要搜索并突出显示网格中的对象时,将发送另一个 .

此外,每个单元格处理onDragEnter,onDragLeave和onDragDrop事件以处理拖动的对象 . 我们只有在需要更新时才会're using OnPush strategy on all the rows and cells, and we call Angular' s detectChanges() .

我们正在进行一些测试,加载40-50行的网格,我们已经意识到应用程序性能下降得相当明显 . 我很确定瓶颈来自所有这些订阅和事件处理程序,所以我在想如何优化应用程序 .

我想两个动作只使用一个订阅(更改名称和突出显示对象)但我也想知道当浏览器窗口中不可见组件时是否有“停用”订阅的方法,并且当我再次订阅时用户滚动到它们 .

有没有人在Angular应用程序中有这种情况?欢迎任何想法;)

谢谢,

1 回答

  • 0

    当组件被销毁时,你应该做的一件事就是来自所有订阅的unsubscribe .

    这样做的主要原因是为了防止内存泄漏,这可能是应用程序速度减慢的根本原因 . 有不同的方法,其中一个官方解决方案(我觉得更清洁)是将所有订阅分组到 Subscription 对象,并在 ngOnDestroy 中对该对象调用 unsubscribe 而不是取消订阅所有单个对象逐一 .

    来自官方docs

    此外,订阅可以通过add()方法组合在一起,该方法将子订阅附加到当前订阅 . 当订阅被取消订阅时,其所有子女(及其孙子女)也将被取消订阅 .

    您可以查看this问题,以便对该主题进行更深入的讨论 .

相关问题