【发布时间】:2012-08-11 17:37:04
【问题描述】:
我有一个 Web 应用程序在某处发生内存泄漏,我无法检测到它。我已经尝试过通常运行良好的 Chrome 开发人员工具,但我无法找到负责的代码行。 Chrome 工具只是给了我太多信息,我无法将内存中的对象与我的代码相关联。
还有其他可能有用的工具吗?
【问题讨论】:
标签: javascript memory-leaks google-chrome-devtools
我有一个 Web 应用程序在某处发生内存泄漏,我无法检测到它。我已经尝试过通常运行良好的 Chrome 开发人员工具,但我无法找到负责的代码行。 Chrome 工具只是给了我太多信息,我无法将内存中的对象与我的代码相关联。
还有其他可能有用的工具吗?
【问题讨论】:
标签: javascript memory-leaks google-chrome-devtools
更新: 让我们使用 Record Heap Allocations 配置文件类型。
查看截屏视频Javascript Memory Leak detection (Chrome DevTools)
曾经: 您可以使用下一个场景来解决内存泄漏问题。
之后,您将看到 objects 一组泄漏的对象。 您可以选择一个对象并查看对象的保留树中的保留者列表
【讨论】:
使用Heap Profiler 的Detached DOM tree 视图中元素的innerHTML 和outerHTML 值将内存中的对象映射到您的代码并跟踪内存泄漏。
【讨论】:
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
【讨论】: