【问题标题】:Is it possible to fix memory leak from third-party ads?是否可以修复第三方广告的内存泄漏?
【发布时间】:2014-03-12 04:38:19
【问题描述】:

我在使用 Google DFP 广告的 Playlist.com 上遇到了持续的内存泄漏 - 让标签页保持打开状态,它始终使用越来越多的内存(仅在启用广告时)。

可在此处找到重现泄漏的示例测试页面:http://dl.dropboxusercontent.com/u/6278910/ad-memory-leak.html

我们可以做些什么来帮助减少泄漏?显然,在经济上,关闭广告是不可能的解决方案。

编辑:您可以在 Chrome 中打开开发者工具并尝试使用内存时间线 - 每次广告加载时,它们会稍微多消耗一点内存。

【问题讨论】:

  • 广告是否在iframe 中加载?
  • 广告本身可以,是的,尽管 Google DFP 作为脚本运行
  • 您可以查看示例页面以了解发生了什么...
  • 大卫评论的重点是“Google DFP [that] 作为脚本运行”然后可以在此 iFrame 中运行,而不是在您的页面中运行。 (那么广告将是 iframe 中的 iframe)。希望定期重新加载第一个 iFrame 会释放该页面上的脚本泄漏的任何内存。
  • @Mikhail - 我们没有找到直接的解决方案 不 - Google DFP 有点承认这个问题,但表示他们有其他优先事项需要先解决。最后,我们构建了我们的应用程序,使其每隔一段时间自动刷新页面,以帮助降低内存使用量。

标签: javascript memory-leaks ads google-dfp


【解决方案1】:

这是可能的,在移除之前尝试重新加载 iframe 以清理 DOM,然后重新添加。另见answer

<a href="#">Remove</a>
<iframe src="url" />​

$('a').click(function(){
    $('iframe')[0].contentWindow.location.reload();
    setTimeout(function(){
       $('iframe').remove();
    }, 1000);

    ... add add iframe again ...
});​

根据制作方法的不同,添加可能会有些闪烁,但应该不是主要的。一段时间后,这些添加已经自行刷新,因此如果这样做,用户不会注意到一次添加一个 iframe。

【讨论】:

  • 有趣的方法 - 我尝试完全删除父 div 并定期重新初始化广告,但没有奏效,但我没有尝试刷新...我将添加并测试。
  • 它不起作用 - 上面的示例页面现在有一个触发此代码的按钮,但它并没有真正解决内存问题。
  • 尝试使用 chrome profiler 比较两个快照,一个是内存开始泄漏时,另一个是泄漏非常明显,请参阅本教程比较两个快照youtube.com/watch?v=L3ugr9BJqIs 检查意外保留路径
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-12-01
  • 2012-01-12
  • 2023-03-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多