为什么translate3d泄漏了DOM节点?

时间:2013-10-06 00:49:48

标签: javascript css google-chrome memory-leaks

考虑这个HTML页面:

http://jsbin.com/aYUcelo/1/ (我建议下载它以摆脱所有的jsbin噪音)。

点击GO按钮,将div添加到正文中。 RM删除其中一个div。 它还将两种样式中的一种应用于新div:

newDiv.style.color = "red";
// or
newDiv.style.WebkitTransform = "translate3d(0px, 0px, 0px)";

如果应用了WebkitTransform,您可以在chrome dev工具内存时间轴中看到不断增加的节点数,GC无法删除。红色样式不会发生这种情况。

编辑:只是为了说明应用“红色样式”添加和删除div的操作是节点计数等效。

这种行为的原因是什么?我错过了这一点吗?甚至没有DOM节点泄漏?

在这里您可以找到两个时间轴记录: https://docs.google.com/file/d/0B9S6doraVaWXdjRyWjluMW1BUlU(翻译) https://docs.google.com/file/d/0B9S6doraVaWXQVAwbFpfZzh1RVE(红色)

在两个记录中,连续添加和删除3个div,最后请求GC。 仅供您参考:我有一个更复杂的角度应用程序,但我可以追查内存泄漏到同样的问题。无论如何,我创造了这个更简单的例子。

编辑:时间轴记录的两张图片: https://docs.google.com/file/d/0B9S6doraVaWXMURzMjdhMWI0UDA https://docs.google.com/file/d/0B9S6doraVaWXWGhwVWhlMjN4dkE

编辑2:运行Windows 8 / Chrome 30.0.1599.69 m

1 个答案:

答案 0 :(得分:0)

您是否偶然使用Visual Studio 2013?如果是这样,请检查您的网络面板,看看是否有任何XHR活动与内存中不稳定的对象操作之间存在关联。如果是这种情况,这是因为Visual Studio 2013集成了一个signalR浏览器监视器,该监视器在您使用它部署的浏览器中测试项目时运行。

相关问题