追踪 JavaScript 内存泄漏的工具

IT技术 javascript memory-leaks google-chrome-devtools
2021-03-08 12:32:00

我有一个 Web 应用程序,它在某处存在内存泄漏,但我无法检测到它。我已经尝试过通常运行良好的 Chrome 开发人员工具,但我无法追踪负责的代码行。Chrome 工具给了我太多信息,我无法将内存中的对象与我的代码相关联。

是否有任何其他工具可能会有所帮助?

3个回答

更新: 让我们使用记录堆分配配置文件类型。

  1. 打开 devtools 分析器
  2. 做一个热身动作
  3. 启动分析器
  4. 重复动作几次
  5. 如果操作有泄漏,您将在概览窗格中看到相同数量的蓝色条组
  6. 停止分析器
  7. 在概览中选择一组这些蓝色条
  8. 查看对象列表

请参阅截屏视频Javascript 内存泄漏检测 (Chrome DevTools)

是: 您可以使用下一个场景来解决内存泄漏问题。

  1. 打开 devtools 分析器
  2. 做一个泄漏的动作
  3. 拍摄堆快照
  4. 重复步骤 2 和 3 树时间
  5. 选择最新的堆快照
  6. 将过滤器“所有对象”更改为“快照 1 和 2 之间的对象”

之后,您将看到一组泄漏的对象。您可以选择一个对象并查看对象保留树中的保留器列表

通常你只知道谁将泄漏的对象添加到容器中,因为它是你的代码。但是,如果您不知道这一点,那么您可以使用新的构造函数覆盖泄漏的对象类,该类记录堆栈跟踪并直接从控制台调用原始对象类。重复这些步骤并查看分配堆栈跟踪的对象。它可以为您提供一个线索,泄漏对象的来源是什么,以及哪些代码应该删除对泄漏对象的最后尊重。
2021-04-23 12:32:00

使用堆分析器分离 DOM 树视图中元素的innerHTML 和outerHTML 值将内存中的对象映射到您的代码并跟踪内存泄漏。

jQuery ajax 请求是我应用程序中最大的罪魁祸首。找到所有 ajax jQuery 函数:.ajax()、.get()、.post() 和内容设置器:.html()、.text()。转到开发工具中的网络选项卡,刷新当前页面 10 到 20 次。我在我的单页 JS 应用程序中使用 jQuery.load() 解决了最近的内存泄漏...if(!jQuery.terms_html) $('#tc_container').load(STATIC_DOMAIN + '/terms.html', function() { jQuery.terms_html = $('#tc_container').html() }) else $('#tc_container').html(jQuery.terms_html)
2021-04-29 12:32:00

jQuery ajax 请求是我应用程序中最大的罪魁祸首。找到所有 ajax jQuery 函数:.ajax()、.get()、.post() 和内容设置器:.html()、.text()。

转到开发工具中的网络选项卡,刷新当前页面 10 到 20 次。如果你看到事情堆积得太频繁,或者调用没有完成,你就有了内存泄漏。

这是我能够使用 jQuery.load() 解决的最近内存泄漏...

if(!jQuery.terms_html) $('#tc_container').load(STATIC_DOMAIN + '/terms.html', function() { jQuery.terms_html = $('#tc_container').html() }) else $('#tc_container').html(jQuery.terms_html)

此外,撰写本文时最新版本的 jQuery 是3.3.1如果可能,安装最新版本是入门的最佳方式。 https://github.com/jquery/jquery/releases