我们有一个视图复杂且冗长的应用程序。一个视图大约有 50 个具有自己的服务、订阅和行为的组件。组件有自己的变量,包括数组和表单组。
问题:从 View2(Component2) 导航回 View1(Component1) 后,我仍然在 chrome devtool 的“内存”选项卡中看到 View2(Component2) 的数据,并且每次快照中都会增加 25 MB 内存。
例如:
每次导航到 View2 时,加载时间都会增加 4-5 秒。 我正在清除 View2 的所有订阅,但在导航 View1 后,它仍然向我显示所有数组和 FormGroup、View2 组件、带有数据的变量。
我期望从 View2 导航后 View1 应该具有相同的大小。
我创建了小应用程序,结果是相同的,
[![在此处输入图像描述][1]][1]
这是预期的行为还是我需要采取一些措施?
我可以看到所有 FormGroup、之前视图的数组。
这些都是Angular中内存泄漏的原因。
取消订阅服务(API)调用 => 如果您从一个组件视图导航到另一个组件视图,并且没有使用
onDestroy
方法取消订阅第一个视图服务,它将递归地重新渲染并导致内存泄漏.
延迟加载 => 如今延迟加载是防止内存泄漏或内存消耗的最重要功能。检查角度延迟加载链接
没有做代码优化 => 作为一名开发人员,代码优化是最重要的一点,防止内存泄漏在不同的组件/服务中重复使用相同的代码或相同的服务。
不使用 Redux/Ngxs/Ngrx => Redux 是在项目中重用相同公共数据的功能之一。
因此,请检查这些要点并将其应用到您的代码结构中以防止内存泄漏,或者如果您需要任何其他帮助,请提供代码结构的额外详细信息。
1.从订阅中取消订阅()。 使用异步管道或 takeUntil()。 2.使用路由器防护。 3.删除事件监听器。