【问题标题】:Chrome extension using jQuery leaks memory使用 jQuery 的 Chrome 扩展程序泄漏内存
【发布时间】:2012-12-12 11:14:36
【问题描述】:

我目前正在开发一个使用内容脚本的扩展(jquery 是内容脚本之一),我注意到页面在长时间使用后会变慢。页面不是动态的,而是在每次点击时刷新(点击按钮时转到不同的页面)。如果我打开任务管理器,我可以清楚地看到内容脚本是造成内存泄漏的原因。

扩展被禁用(大约 20 次刷新后)

启用(大约 20 次刷新后)

我通过删除所有其他脚本并通过删除 jQuery 脚本来确认泄漏已缩小到 jQuery 和 jQueryUI 脚本,以便不再存在泄漏。

我使用的是最新版本的 jQuery,但在其他使用它的页面中没有看到这种泄漏。

我能做些什么来至少减少内存泄漏?

-- 编辑

扩展名是Project-Axeman,所以如果你认为它是其他泄漏的东西,你可以看看。

-- 更新

我已将 jQuery 替换为 beta 版本,但问题仍然存在...

【问题讨论】:

  • 仅仅因为使用jQuery的扩展有泄漏,并不意味着jQuery有泄漏。
  • 我认为 jQuery 没有泄漏,而且在 Github 存储库中,您的 jQuery 是一个空白文件。除了删除脚本之外,到目前为止,您还做了什么来调试您的应用程序?
  • @jjperezaguinaga jQuery 脚本不是空白的,它被最小化并且在 github 下不能正确显示(尝试使用水平滚动)。老实说,这是我的第一个 js 项目,所以我还没有进入内存分析。我已经拍摄了堆快照,但无法从中读取任何内容。
  • 您提到您的应用程序“refreshes on every click”让我想起了Content Scripts causing memory leak,其中不断重新注入重新加载 iframe 的内容脚本导致浏览器级内存泄漏。 jQuery 很可能与您的泄漏完全无关。
  • @apsillers 我已经纠正了错误——点击时,页面导航到另一个页面,并在那里重新注入内容脚本(不使用 iframe)。很抱歉造成误解。

标签: jquery google-chrome memory-leaks google-chrome-extension chromium


【解决方案1】:

使用chrome的开发者工具有Heap ProfileDemo's,通过这些你可以得到

  • 对象占用的space概览
  • Garbage 通过多次调用留下的操作
  • Inspect 闭包变量,窥探对象内部
  • 发现DOM Leaks 还有更多

但是,任务管理器中还有一些其他选项,它们提供的细节比抽象内存值更详细。

【讨论】:

  • 感谢您的信息。我查看了其他类别,我可以看到“JavaScript 内存”在每次刷新时都在增加(其他保持不变)并且所有使用的内存都是私有内存。当我删除应用程序脚本时也会发生同样的事情(只剩下 jquery/UI),但是当 jQuery 脚本也被删除时也没有泄漏...... TM 说 JavaScript 内存为 114,912K(94,291K 实时)
  • 使用堆分析器并在一次刷新之间比较两个快照,大多数内存增量位于(数组)和(编译代码)上。我认为编译后的代码不会在每次刷新和数组(+73 908)时增加那么多(+96 812)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-30
  • 2019-07-16
  • 2012-07-31
  • 2018-05-19
  • 2014-03-10
  • 2012-09-06
相关资源
最近更新 更多