您的位置:首页 > Web前端 > JavaScript

如何防止动态加载JavaScript引起的内存泄漏问题

2009-10-21 09:45 387 查看
利用Script标签可以跨域加载并运行一段JavaScript脚本, 但Neil
Fraser先前已指出,脚本运行后资源并没被释放,即使是Script标签移除后。为了释放脚本资源,通常在返回后还要一些进行额外的处理。

script = document.createElement('script');
script.src =
'http://www.my400800.cn';
script.id = 'JSONP';
script.type = 'text/javascript';
script.charset = 'utf-8';
// 标签加到head后,会自动加载并运行。
var head = document.getElementsByTagName('head')[0];
head.appendChild(script)


实际上很多流行的JS库都采用这种方式,创建一个scritp标签,赋予一个ID后加载脚本(比如YUI
get()),加载完并回调后清除该标签。问题在于当你清除这些script标签的时候,浏览器仅仅是移除该标签结点。

var script = document.getElementById('JSONP');
script.parentNode.removeChild(script);


当浏览器移除这标签结点后的同时并没对结点内JavaScript资源的进行垃圾回收,这意味着移除标签结点还不够,还得手动的清除script标签结点的内容:

// Remove any old script tags.
var script;
while (script = document.getElementById('JSONP')) {
script.parentNode.removeChild(script);
// 浏览器不会回收这些属性所指向的对象.
//手动删除它以免内存泄漏.
for (var prop in script) {
delete script[prop];
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: