关于内存泄漏的问题JS(try / catch,b64中的图像,ajax,未设置变量,removeChild)

时间:2011-04-06 06:20:02

标签: javascript firefox firefox-addon

好的,我有一个包含一些内容的列表,这就是为什么我的附加组件使用了大量内存的原因。

1 - 使用try / catch可以增加内存使用量吗? 例如:

try{
  if(!condition) throw "Message";
  //some code
}catch(ex){}

如果这是问题,我正在考虑使用:

(function(){
     if(!condition) return;
})();

2 - 使用带有base64的图像也可以提高内存使用率吗?

<img src="data:image/png;base64,[...]==" />

或者没有问题?

3 - 我使用函数来处理ajax结果,所以我可以使用responseXML ...

if (o.readyState != 4) return;

var newdoc = document.implementation.createDocument(null, null, null);

var newhtml = document.createElement('div');

newhtml.innerHTML = o.responseText.replace(/script/ig, "");

newdoc.appendChild(newhtml);

newdoc.getElementById('...');

我不能使用jquery,这是我发现使用responseXML的最简单方法,但也可能导致内存泄漏。

4 - 取消设置变量,有所帮助或无益吗?

var a = "something";
if(a=="something")
    //

//I'm not going to use the variable "a" anymore, so..
a = undefined; //Now i unset the variable

5 - 如果向元素添加事件,或者使用appenChild,则会增加内存。

element.appendChild(newelement);

如果更改页面,看起来内存仍然相同..如果我使用

window.addEventListener("unload", function() {
    element.removeChild(newelement)
}

这也有帮助?

感谢。

对不起英文。

1 个答案:

答案 0 :(得分:0)

4日和5日。

浏览器真的会增加每个附加事件\元素的内存,但在某些事件\元素被删除后不会立即减少它。

在垃圾收集中,每个浏览器都有“Dao”:):

  • IE 6-8根本不清除内存(直到你关闭它或按F5)。

  • Chrome最多需要5分钟才能运行垃圾收集器,或者垃圾邮件大小达到固定数量时。

  • Opera“吃”了比任何其他浏览器更多的内存,但在它变得不需要之后立即释放它。

  • 最快的是FF将近1分钟,以清除未使用数据的内存。