20

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

还有其他可能有用的工具吗?

4

3 回答 3

27

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

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

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

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

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

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

于 2012-08-21T18:52:22.690 回答
2

使用Heap Profiler的Detached DOM 树视图中元素的 innerHTML 和 outerHTML 值将内存中的对象映射到您的代码并跟踪内存泄漏。

于 2012-08-17T17:28:10.487 回答
0

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

于 2018-02-21T08:02:01.980 回答