卸载网页后Javascript内存泄漏
我一直在阅读,试图弄清楚浏览器中的内存泄漏,尤其是. IE浏览器.我知道泄漏是由 Javascript引擎和DOM对象树之间的垃圾收集算法不匹配引起的,并且会持续存在.我不明白的是为什么(根据我正在阅读的文章中的一些陈述)在浏览器卸载页面后不回收内存.导航离开网页应该将所有DOM和javascript对象放在范围之外,不应该吗? 解决方法这是问题所在. IE有一个单独的垃圾收集器用于DOM和javascript.他们无法检测两者之间的循环引用.我们过去常常在页面卸载时清理所有节点的所有事件处理程序.但是,这可以在卸载时停止浏览器.这只解决了循环引用是由事件处理程序引起的情况.它也可能是由于从DOM节点向js对象添加直接引用而引起的,这些对象具有对DOM节点本身的引用. 另一件值得记住的好事是,如果要删除节点,最好先自己删除处理程序. Ext-js有一个Ext.destroy方法就是这样做的(如果你使用ext设置处理程序). 例 // 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’s description of the problem MS releases patch that “fixes” memory leaks: Blog about fixed memory leaks IE still has some problems 在我们公司,我们使用ext-js.通过始终使用具有内部清理例程的ext-js设置事件处理程序,我们没有遇到内存泄漏.实际上,对于具有4Gb RAM的机器,内存使用量会增加,但会停止在250Mb左右.我们认为这不太糟糕,因为我们加载了大约2Mb(未压缩)的js文件,并且页面上的所有元素都是动态的. 关于这一点有很多要说的,我们在工作的地方进行了广泛的研究.随意提出更具体的问题.我或许可以帮到你. (编辑:晋中站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |