最近开发的时候对页面使用了定时的局部更新,结果在ie6,7和firefox下,一切正常,而在ie8下过上几个小时就浏览器就崩溃了,显示是内存溢出,我以为是代码写的不好导致内存泄露,但是ie6,7又正常,调查了一下,原来这是ie8的bug。
问题点
在IE8中,生成特定Dom节点所占用的内存是不会被释放的,即使这些节点被删除内存也不会被释放。
内存泄露的节点类型包括:form、button、input、select、textarea、a、img和objec
其他的大部分节点类型是不会泄露的,例如:span、div、p、table等等。
立即学习“Java免费学习笔记(深入)”;
此问题只发生在IE8,其他浏览器不发生。
如果用户按了F5,IE8会重新刷新页面,首先它会unload window.top,这时候会释放掉内存。如果页面是iframe,则unload此iframe,没有任何反应。看起来只有window.top被 unload,内存才会被释放。
例子
例1
执行下面的代码,IE8就会泄露内存。
function leak1() {
var node = document.getElementById("TO_AREA");
node.innerHTML = "
";
node.innerHTML = "";
node = null;
}
注意:
* 此例子添加了节点,所以会泄露。
* 在中有个div,id为“TO_AREA”。
* 提醒一下,这里没有闭包和循环引用。
例2
下面的代码没有使用innerHTML,但是还是会泄露
function leak2() {
var node = document.getElementById("FROM_AREA").cloneNode(true);
node.id = "NEW_AREA";
document.body.appendChild(node);
document.body.removeChild(node);
node = null;
}
注意:
* FROM_AREA 是form的id,而且这里也没有闭包和循环引用。
例3
这是最简单,最直接的例子:
function leak4() {
var node = document.createElement("IMG");
document.body.appendChild(node);
document.body.removeChild(node);
}
注意:
* 如果用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不能正常回收所造成的内存泄露。
相关专题
想找真正自由、无限制的上网体验?本合集精选2025年最开放、隐私强、访问无阻的浏览器App,涵盖Tor、Brave、Via、X浏览器、Mullvad等高自由度工具。支持自定义搜索引擎、广告拦截、隐身模式及全球网站无障碍访问,部分更具备防追踪、去谷歌化、双内核切换等高级功能。无论日常浏览、隐私保护还是突破地域限制,总有一款适合你!
7
2025.12.31
想让网页流畅播放视频?本合集详解HTML5视频播放核心方法!涵盖<video>标签基础用法、多格式兼容(MP4/WebM/OGV)、自定义播放控件、响应式适配及常见浏览器兼容问题解决方案。无需插件,纯前端实现高清视频嵌入,助你快速打造现代化网页视频体验。
3
2025.12.31
想快速上手HTML5开发?本合集为你整理最实用的HTML5使用指南!涵盖HTML5基础语法、主流框架(如Bootstrap、Vue、React)集成方法,以及无需安装、直接在线编辑运行的平台推荐(如CodePen、JSFiddle)。无论你是新手还是进阶开发者,都能轻松掌握HTML5网页制作、响应式布局与交互功能开发,零配置开启高效前端编程之旅!
2
2025.12.31
热门下载
相关下载
精品课程
最新文章







