卸载网页后的Javascript内存泄漏(Javascript memory leaks after

2019-06-24 20:35发布

我一直在读了尽量使内存泄漏的意识在浏览器中,ESP。 IE浏览器。 据我所知,泄漏是由JavaScript引擎和DOM对象树之间的垃圾收集算法的不匹配造成的,将持续过去。 我不明白的是为什么(根据我在读文章的一些语句)的页面被浏览器卸载后的内存不回收。 从网页浏览程应该把所有的DOM,并在这一点JavaScript对象超出范围,不应该吗?

Answer 1:

这里的问题。 IE具有用于DOM和为JavaScript一个单独的垃圾收集器。 他们无法检测到两者之间的循环引用。

我们习惯在页面卸载清理所有节点的所有事件处理程序。 这可能,但是,阻止浏览器,而卸载。 此仅讨论其中圆形参考由事件处理程序引起的情况。 它也可以通过添加DOM节点直接引用的js其中有对DOM节点本身的参考对象造成的。

另一个好一点要记住的是,如果要删除的节点,这是一个好主意,自己先移除处理程序。 EXT-JS有Ext.destroy方法做到了这一点(如果你设置使用分机的处理程序)。

// Leaky code to wrap HTML elements that allows you to find the custom js object by adding 
//a reference as an "expando" property
function El(node) {
  this.dom = node;
  node.el = this;
}

那么微软IE砍死所以内部卸载时,它删除了所有事件处理程序和expando属性,因此它比用JS做快得多。 此修复程序似乎解决了内存的问题,但不是所有的问题,还有人仍然有问题。

问题的MS的描述

MS发布补丁“修复”内存泄漏:

博客关于固定的内存泄漏

IE浏览器仍然存在一些问题

在我们公司,我们使用EXT-JS。 通过使用EXT-JS,其中有一个内部清理程序设置总是事件处理程序,我们没有经历过的内存泄漏。 在现实中,内存使用量的增长,但在250MB左右为停止使用4GB内存的机器。 我们不认为,因为我们加载2MB左右的js文件和所有网页上的内容是动态的(未压缩)这太糟糕了。

有很多可说的这件事,在我工作的,我们已经广泛地研究这一点。 随意问一个更具体的问题。 我也许能帮助你。



Answer 2:

我曾经读到的最好的事情的Javascript内存泄漏是书面的Doulgas克罗克福德。

要回答你的问题,是的,浏览器绝对应该卸载在适当的时候所有对象(也是最重要的是,事件处理程序)。 如果有,它不会必须泄漏:)



Answer 3:

你不必让他们的感觉 - 他们是在broswers错误和版本的版本是固定的。



文章来源: Javascript memory leaks after unloading a web page