当前位置: 首页 > 图文教程 > 工具软件 > 浏览下载 > IE6内存泄露的另类解决方法

浏览下载
IE8简体中文正式版Web开发新特性
傲游浏览器资源收集功能
IE8浏览器的internet选项设置技巧
卸载IE8恢复IE7的技巧
清除IE8的网页浏览历史记录
IE8浏览器登录淘宝或支付宝不能输入密码问题
Maxthon用户在升级完IE8出现困惑的参考
不了解如何修改config也能加速你的Firefox
TidyRead避免阅读网页干扰最简洁浏览网页
IE8浏览器占用的内存高于其他的浏览器
提高迅雷下载速度的4招秘籍
Firefox的这些参数你会修改吗?
IE运行含有JS代码网页出现警告怎么去掉?
Firefox 3.5的HTML5和CSS3特性
关于QQ旋风 2.0正式版的猜测
试用傲游3.0 Alpha2最新浏览器
eMule Xtreme V7.2 final 正式发布
教你灵活使用IE8浏览器
傲游下载技巧集结号 浏览和高速下载两不误
轻松玩转傲游浏览器的小技巧

浏览下载 中的 IE6内存泄露的另类解决方法


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-10-11   浏览: 73 ::
收藏到网摘: n/a

Hedger Wang 在国内 blog 上得到的方法:使用 try … finally 结构来使对象最终为 null ,以阻止内存泄露。

其中举了个例子:

function createButton() {
    var obj = document.createElement("button");
    obj.innerHTML = "click me";
    obj.onclick = function() {
        //handle onclick
    }
    obj.onmouseover = function() {
        //handle onmouseover
    }
    return obj;//return a object which has memory leak problem in IE6
}
var dButton = document.getElementById("d1").appendChild(createButton());
//skipped.... 

对于 IE6 中,引起内存泄露的原因,可看《Understanding and Solving Internet Explorer Leak Patterns》一文。

上面的例子,应该属于上文中的 “Closures”原因。

再看下用 try … finally 的解决方法:

/**
     * Use the try ... finally statement to resolve the memory leak issue
*/
function createButton() {
    var obj = document.createElement("button");
    obj.innerHTML = "click me";
    obj.onclick = function() {
        //handle onclick
    }
    obj.onmouseover = function() {
        //handle onmouseover
    }
    //this helps to fix the memory leak issue
    try {
        return obj;
    } finally {
        obj = null;
    }
}
var dButton = document.getElementById("d1").appendChild(createButton());
//skipped....

可能大家有疑问: finally 是如何解析的呢?

答案是:先执行 try 语句再执行 finally 语句。

例如:

function foo() {
    var x = 0;
    try {
        return print("call return " + (++x));
    } finally {
        print("call finally " + (++x));
    }
}
print('before');
print(foo());
print('after');

返回的结果为:
print » before
print » call return 1
print » call finally 2
print » true
print » after

更多详细的演示:
《Finally, the alternative fix for IE6’s memory leak is available》

相关的一些讨论:
《Is “finally” the answer to all IE6 memory leak issues?》