我正在开发一个具有单元格网格的应用程序,用户可以从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 回答
当组件被销毁时,你应该做的一件事就是来自所有订阅的unsubscribe .
这样做的主要原因是为了防止内存泄漏,这可能是应用程序速度减慢的根本原因 . 有不同的方法,其中一个官方解决方案(我觉得更清洁)是将所有订阅分组到
Subscription
对象,并在ngOnDestroy
中对该对象调用unsubscribe
而不是取消订阅所有单个对象逐一 .来自官方docs:
您可以查看this问题,以便对该主题进行更深入的讨论 .