【问题标题】:HighCharts/HighStock memory leak with addPoints() in Chrome only仅在 Chrome 中使用 addPoints() 的 HighCharts/HighStock 内存泄漏
【发布时间】:2013-02-09 03:58:07
【问题描述】:

HighStock 网站上的“Dynamically updated data”演示似乎在当前版本的 Google Chrome (24.0) 中泄漏了内存。我已经在 Mac OS X 10.8.2 和 Windows 7(64 位)上试过了。我还在 OS X 上尝试了 Safari 6.0.2,在 Windows 7 上尝试了 IE9 和 Firefox 18。泄漏似乎只发生在 Chrome 中,而且总是会发生。

鉴于这是一个相当突出的演示,我预计它会运行良好。但是如果有足够的时间,它会在 Chrome 中崩溃,并出现“Aw, Snap”错误页面。在编写的演示中可能需要很长时间,但是如果您单击 jsFiddle 链接并将 setInterval() 调用更改为 100 毫秒而不是 1000 毫秒,则泄漏相当明显。具有多个系列和大量数据的真实应用程序可能会在几分钟内使 Chrome 崩溃。

请注意,在不断添加数据时,addPoints() 中的“shift”参数始终为真,这意味着旧数据会以同样快的速度被丢弃。所以内存使用量应该是相当稳定的——在 Chrome 以外的浏览器上也是如此。

我不确定如何判断这是 Chrome 错误还是 HighCharts 错误。而且我还没有找到有用的解决方法。非常感谢任何一个方面的结论性答案。

【问题讨论】:

  • 很可能是一个在 Chrome 中最明显的 HighCharts 错误,因为它将每个选项卡作为自己的进程运行。如果您可以找到正在使用内存的内容,以下提示可能会有所帮助:stackoverflow.com/questions/5181954/…
  • 我在没有打开其他网页的情况下运行 Safari。还有IE。只有 Chrome 的内存使用量似乎在增加。
  • 刚刚在 Linux (Fedora 14) 下使用 Chrome 23 尝试了链接演示(更新时间为 100 毫秒)并且没有泄漏。但是,在 Windows 7 上的 chrome 24 下,它大约每 2 秒消耗 1 兆内存!
  • 我也遇到了同样的情况,看来chrome不想收集未使用的dom元素(未使用的svg元素)。如果您使用 purge-memory-button 启动 chrome 并单击它,您将看到内存已释放:)。

标签: javascript google-chrome memory-leaks highcharts highstock


【解决方案1】:

受马克评论的启发,我决定尝试不同版本的各种事物。首先,我尝试了最新版本的 jQuery 和 HighStock。 Chrome 24(稳定版)仍然泄漏。然后我尝试了 Chrome 23,因为它适用于 Fedora 上的 Mark,但它仍然在 Mac OS 上泄漏。

然后我尝试了 Chrome Canary 版本 26.0。它有效,没有泄漏!它展示了经典的垃圾收集模式,即每隔几秒就会建立几十兆字节的多余内存使用量,然后回落到“正常”状态。所以这是个好消息。坏消息是 Chrome Beta,25.0,仍然泄漏。因此,如果 HighCharts 的其他用户在接下来的几个月内遇到此问题,他们将需要使用“不稳定”版本的 Chrome,或者只是使用不同品牌的浏览器。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-05-02
    • 2011-07-08
    • 1970-01-01
    • 2011-10-30
    • 2019-03-12
    • 2013-11-06
    • 1970-01-01
    相关资源
    最近更新 更多