IE8 内存泄露(内存一直增长 )的原因及解决办法

2024-06-24 11:13:49阅读量:32 字体:

最近开发的时候对页面使用了定时的局部更新,结果在ie6,7和Firefox下,一切正常,而在ie8下过上几个小时就浏览器就崩溃了,显示是内存溢出,我以为是代码写的不好导致内存泄露,但是ie6,7又正常,调查了一下,原来这是ie8的bug。

问题点

在IE8中,生成特定Dom节点所占用的内存是不会被释放的,即使这些节点被删除内存也不会被释放。

内存泄露的节点类型包括:form、button、input、select、textarea、a、img和objec

其他的大部分节点类型是不会泄露的,例如:span、div、p、table等等。

此问题只发生在IE8,其他浏览器不发生。

如果用户按了F5,IE8会重新刷新页面,首先它会unload window.top,这时候会释放掉内存。如果页面是iframe,则unload此iframe,没有任何反应。看起来只有window.top被 unload,内存才会被释放。

例子

例1

执行下面的代码,IE8就会泄露内存。

IE8 内存泄露(内存一直增长 )的原因及解决办法

注意:

* 此例子添加了节点,所以会泄露。

* 在中有个div,id为“TO_AREA”。

* 提醒一下,这里没有闭包和循环引用。

例2

下面的代码没有使用innerHTML,但是还是会泄露

注意:

* FROM_AREA 是form的id,而且这里也没有闭包和循环引用。

例3

这是最简单,最直接的例子:

注意:

* 如果用span来代替img,就不会有泄露了。

这些例子只在IE8中泄露内存,我在Windows XP, Windows Vista, Windows Server 2008, Windows Server 2008 R2和Windows 7 中的IE8都作了测试,而且使用了IE8中的IE7兼容模式和标准模式,每种情况下都会泄露。

测试页面

关于泄露

内存大小随着时间的推移而增长,但这并不直接导致浏览器崩溃。浏览器使用的内存好像是有上限的,它似乎会从某些内部手段来限制DHTML使用的内存。

内存到达上限后,浏览器会自动处理,例如弹出对话框,显示内存不足。

经过自己测试发现 IFrame同样存在这个问题(在IE8下)

补充:iframe内存释放

Ext 核心开发人员Jack的回答是,TabPanelItem在关闭时并不会对自定义到tab中的元素做特殊处理,这部分工作必须在控件外来完成。另一方面, 相关资料称IE在iframe元素的回收方面存在着bug,在通常情况下应该将该元素的src属性值修改为”abort:blank”,并手工将其从 DOM树上移除,然后把脚本中引用它的变量置空并调用CollectGarbage()就可以避免iframe不能正常回收所造成的内存泄露。

推荐阅读

  • 删除微信表情包

    删除微信表情包

    很多人的微信添加了很多表情包,如果要将微信内添加的表情包删除,进入微信的表情功能页面即可进行删除。具体操作方法如下: 删除微信表情包 1、打开手机微信app,点击我”,再点击表情&rdqu...

    阅读: 790

  • 家人地图如何开启永久位置

    家人地图如何开启永久位置

    家人地图是高德地图推出的家人定位查询功能,要开启家人地图永久位置分享,可以直接在家人地图设置中开启。具体操作方法如下: 家人地图如何开启永久位置 1、打开手机高德地图app,点击我的”。 ...

    阅读: 839

  • 快手号怎么修改不了,只有复制

    快手号怎么修改不了,只有复制

    快手号只有复制,修改不了,是因为近期已经修改过快手号了,从修改时开始需要等待90天后才能再次修改。修改快手号的具体操作方法如下: 快手号怎么修改不了,只有复制 1、打开手机快手app,点击左上角三条横...

    阅读: 724

  • qq群怎么设置不让群成员加好友

    qq群怎么设置不让群成员加好友

    qq群目前还不能设置不让群成员加好友,只能设置不让群里的人发起临时会话减少群员的互动性。设置不让群里的人发起临时会话的具体操作如下: qq群怎么设置不让群成员加好友 1、打开手机QQ软件,找到自己创建...

    阅读: 706

  • 朋友圈设置三天可见是对所有人吗

    朋友圈设置三天可见是对所有人吗

    朋友圈三天可见是针对朋友圈的一个设置,针对所有的朋友,朋友圈设置三天可见后,所有朋友只能看到你最近三天的朋友圈。朋友圈设置三天可见的具体操作如下: 朋友圈设置三天可见是对所有人吗 1、打开手机微信ap...

    阅读: 731

  • 微信很小的那种表情包怎么做的

    微信很小的那种表情包怎么做的

    平常生活中微信很小的那种表情包可以在微信的小程序里根据自己的喜好进行制作,通过以下步骤制作微信表情包: 微信很小的那种表情包怎么做的 1、打开微信,切换到发现页面,点击小程序”进入小程序页...

    阅读: 1365