如何防止 Angular 中的内存泄漏

2024-01-13

我们有一个具有复杂且冗长视图的应用程序。一个视图大约有 50 个具有自己的服务、订阅和行为的组件。组件有自己的变量,包括数组和表单组。

问题:从 View2(Component2) 导航回 View1(Component1) 后,我仍然在 chrome devtool 的“内存”选项卡中看到 View2(Component2) 的数据,并且每次快照中都会增加 25 MB 内存。

Eg:

  • View1 的第一次快照 --> 50 MB
  • 导航至视图 2。导航到 View1 --> 快照大小为 75 MB
  • 导航至视图 2。导航到 View1 --> 快照大小为 100 MB

每次,当我导航到 View2 时,加载时间都会增加 4-5 秒。 我正在清除 View2 的所有订阅,但在导航 View1 后,它仍然向我显示所有数组和 FormGroup、View2 组件、带有数据的变量。

我期望从 View2 导航后 View1 应该具有相同的大小。

我创建了小型应用程序,结果是相同的,

[![在此处输入图像描述][1]][1]

这是预期的行为还是我需要采取一些步骤?

In actual application, I see below snapshot after navigating back to View1. enter image description here

我可以看到所有 FormGroup,以及先前视图的数组。


这些都是Angular中内存泄漏的原因。

  1. 取消订阅服务(API)调用 => 如果您从一个组件视图导航到另一个组件视图,并且您没有使用取消订阅第一个视图服务onDestroy方法它将递归地重新渲染并导致内存泄漏。

  2. 延迟加载 => 如今,延迟加载是防止内存泄漏或内存消耗的最重要功能。查看角度延迟加载 https://angular.io/guide/lazy-loading-ngmodules link

  3. 没有做代码优化 => 作为一名开发人员,代码优化是最重要的一点,以防止内存泄漏在不同的组件/服务中重复使用相同的代码或相同的服务。

  4. 不使用 Redux/Ngxs/Ngrx => Redux 是在项目中重用相同公共数据的功能之一。

    https://www.ngxs.io/getting-started/installation https://www.ngxs.io/getting-started/installation

因此,请检查这些要点并将其应用到您的代码结构中以防止内存泄漏,或者如果您需要任何其他帮助,请提供代码结构的额外详细信息。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何防止 Angular 中的内存泄漏 的相关文章

随机推荐

  • 用C#改变单元格的背景

    我正在开发一个使用 C 来操作 Excel 文档的程序 并且我正在使用 Microsoft Office Interop Excel Worksheet worksheet 当我将某些内容插入 x y 单元格时 我使用 worksheet
  • 在 free() 后将指针设置为 NULL 总是一个好习惯吗? [复制]

    这个问题在这里已经有答案了 可能的重复 释放后将变量设置为 NULL https stackoverflow com questions 1025589 setting variable to null after free 我正在学习良好
  • java.exe 的服务器选项

    服务器热点和客户端热点有什么区别 有什么理由将生产环境切换到 server 请分享您的实践经验 有性能提升吗 与 Oracle UCM 10g 相关 是的 可以有一个huge在某些情况下性能提升 在对我的 Protocol Buffers
  • 在java中设置代理

    我创建了一项通过互联网发布内容的服务 一切都很好 但是当我将其部署到我们的服务器时 我得到连接状态 403 禁止 我认为这是因为我们的服务器不允许在未先登录的情况下直接访问互联网 我们必须首先使用我们的用户名 密码在浏览器中登录才能访问互联
  • 通过地址栏加载远程 JavaScript 文件

    是否可以从地址栏加载远程 JavaScript 文件 我一直试图将其放入地址栏 javascript src http depot com file js funcname 我不会用它来做坏事 我只是测试我的网站 仅此而已 如果你想保护你的
  • 如何将 javaw.exe 控制台输出重定向到日志文件?

    我想从批处理文件启动我的 Java 程序 这是我想用来启动应用程序的脚本 但问题是我无法将控制台输出重定向到日志文件 任何人都可以提供任何提示 而无需编辑任何代码 并使用 Java 命令行选项或其他东西吗 echo off set TASK
  • 如何在不换行的情况下打印完整的 NumPy 数组(在 Jupyter Notebook 中)

    这个问题与这个问题不同 如何打印完整的 NumPy 数组而不截断 https stackoverflow com questions 1987694 how to print the full numpy array without tru
  • Android Studio 在 M1 Apple Silicon 芯片上非常滞后

    我已从第 7 代升级到 M1 芯片 2020 Macbook Air 英特尔芯片电脑 总的来说 我对此感到非常高兴和满意 但当谈到我经常使用的 Android Studio 性能时 我很抱歉地说 非常令人失望 Apple Silicon 兼
  • 如何在 Android 上的 ListActivity 中实现上下文菜单?

    如何实现通过长按或点击使用内置布局和 ListAdapter 的 ListActivity 触发的上下文菜单 在 onCreate 方法调用上注册上下文菜单 http developer android com reference andr
  • Tensorflow GradientTape 间歇性地出现“变量不存在梯度”

    在训练我的网络时 我偶尔会遇到警告 W0722 11 47 35 101842 140641577297728 optimizer v2 py 928 Gradients does not exist for variables model
  • 在 Ubuntu 上导入 matplotlib

    所以我下载并安装了matplotlib 奇怪的是 当它们放置在 home user Desktop 中时 我可以很好地运行这些示例 但是当我将它们移动到 home user Documents 时 它们停止工作 并且我收到以下消息 Docu
  • 拍摄嵌入式 Linux 帧缓冲区的屏幕截图

    我在评估套件 Zoom OMAP35x Torpedo 开发套件 上运行嵌入式 Linux 该板有一个 LCD 我希望能够拍摄屏幕截图并将其转换为 gif 或 png 我可以通过执行以下操作来获取原始数据 cp dev fb0 screen
  • jqgrid搜索/过滤器

    这与我的最新问题有关link https stackoverflow com questions 5775022 edited how to display the searched data on the jgrid 我已经弄清楚错误是什
  • 在 Angular UI Bootstrap 中打开模式时出现 404 Not Found 错误

    我在使用 UI Bootstrap 时遇到一个非常奇怪的问题 即使是最简单的例子也不起作用 这就是我的情况 我有一个使用 yeoman 插件的 Play Framework 应用程序 https github com tuplejump p
  • Python:无法捕获 IndexError

    免责声明 这看起来像是重复的 但找到这个特定问题的答案不仅仅是微不足道的 我希望其他人能更轻松地找到这个问题 答案 当我运行以下代码时 它无法捕获第二个 IndexError 而是引发它 try raise ValueError excep
  • 如何向 Xbox Live Restful API 发送请求?

    我想向 Xbox Live Restful API 的配置文件 URI 和人员 URI 发送请求 我无法理解这两个接口的授权部分 POST 用户 批 配置文件 设置 https learn microsoft com en us windo
  • 在azure构建管道中,一旦推送,如何从自托管代理清理docker镜像(作为管道的一部分创建)?

    我正在使用自托管代理来运行我的构建管道 代理机器已下载基础 docker 映像 管道使用第一个任务构建并推送新的 docker 映像 基于基础映像的顶部 如以下屏幕截图所示 一旦构建了映像并将其推送到容器注册表 我希望从自托管代理中清理映像
  • 覆盖 Django Forms 中的标签

    我有 3 个具有相同字段的部分 除了 标题 字段上的标签 对于所有这些 我都使用相同的 Django 表单 在我的观点中 def get self context self CONTEXT CLASS self MODEL CLASS co
  • 使用 Microsoft 认知语音 API 和非麦克风实时音频流进行语音识别

    Problem 我的项目由一个实时录制音频的桌面应用程序组成 我打算为此接收来自 API 的实时识别反馈 与一个麦克风 使用 Microsoft 新的 Speech to Text API 进行实时实现是微不足道的 我的场景与此的不同之处仅
  • 如何防止 Angular 中的内存泄漏

    我们有一个具有复杂且冗长视图的应用程序 一个视图大约有 50 个具有自己的服务 订阅和行为的组件 组件有自己的变量 包括数组和表单组 问题 从 View2 Component2 导航回 View1 Component1 后 我仍然在 chr