加入收藏 | 设为首页 | 会员中心 | 我要投稿 辽源站长网 (https://www.0437zz.com/)- 云专线、云连接、智能数据、边缘计算、数据安全!
当前位置: 首页 > 综合聚焦 > 资源网站 > 资源 > 正文

卸载网页后Javascript内存泄漏

发布时间:2020-12-26 18:14:27 所属栏目:资源 来源:网络整理
导读:我一直在阅读,试图弄清楚浏览器中的内存泄漏,尤其是. IE浏览器.我知道泄漏是由 Javascript引擎和DOM对象树之间的垃圾收集算法不匹配引起的,并且会持续存在.我不明白的是为什么(根据我正在阅读的文章中的一些陈述)在浏览器卸载页面后不回收内存.导航离开网页

我一直在阅读,试图弄清楚浏览器中的内存泄漏,尤其是. 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文件,并且页面上的所有元素都是动态的.

关于这一点有很多要说的,我们在工作的地方进行了广泛的研究.随意提出更具体的问题.我或许可以帮到你.

(编辑:辽源站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读