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


Posted in Javascript onOctober 08, 2009

为了释放脚本资源,通常在返回后还要一些进行额外的处理。

script = document.createElement('script'); 
script.src = 
'http://example.com/cgi-bin/jsonp?q=What+is+the+meaning+of+life%3F'; 
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]; 
} 
}
Javascript 相关文章推荐
jQuery Ajax使用 全解析
Dec 15 Javascript
js判断字符长度以及中英文数字等
Dec 31 Javascript
cookie的secure属性详解
Apr 08 Javascript
每天一篇javascript学习小结(Date对象)
Nov 13 Javascript
AngularJS 作用域详解及示例代码
Aug 17 Javascript
谈谈因Vue.js引发关于getter和setter的思考
Dec 02 Javascript
jQuery基本选择器和层次选择器学习使用
Feb 27 Javascript
JS实现无缝循环marquee滚动效果
May 22 Javascript
基于hover的用法实例(推荐)
Jul 04 Javascript
ES6中的class是如何实现的(附Babel编译的ES5代码详解)
May 17 Javascript
JS面向对象编程基础篇(三) 继承操作实例详解
Mar 03 Javascript
JavaScript实现随机点名程序
Mar 25 Javascript
JavaScript delete 属性的使用
Oct 08 #Javascript
有效的捕获JavaScript焦点的方法小结
Oct 08 #Javascript
Javascript isArray 数组类型检测函数
Oct 08 #Javascript
JavaScript 监听textarea中按键事件
Oct 08 #Javascript
jquery 最简单的属性菜单
Oct 08 #Javascript
Javascript 日期处理之时区问题
Oct 08 #Javascript
学习ExtJS table布局
Oct 08 #Javascript
You might like
基于OpenCV的PHP图像人脸识别技术
2009/10/11 PHP
PHP使用strtotime计算两个给定日期之间天数的方法
2015/03/18 PHP
老生常谈文本文件和二进制文件的区别
2017/02/27 PHP
PHPUnit + Laravel单元测试常用技能
2019/11/06 PHP
漂亮的widgets,支持换肤和后期开发新皮肤(2007-4-27已更新1.7alpha)
2007/04/27 Javascript
自己的js工具_Form 封装
2009/08/21 Javascript
js 获取中文拼音,Select自动匹配字母获取值的代码
2009/09/23 Javascript
JavaScript 匿名函数(anonymous function)与闭包(closure)
2011/10/04 Javascript
通过js动态操作table(新增,删除相关列信息)
2012/05/23 Javascript
原生js拖拽(第一课 未兼容)拖拽思路
2013/03/29 Javascript
关于jquery.validate1.9.0前台验证的使用介绍
2013/04/26 Javascript
使用javascript实现有效时间的控制,并显示将要过期的时间
2014/01/02 Javascript
12306验证码破解思路分享
2015/03/25 Javascript
JS控制伪元素的方法汇总
2016/04/06 Javascript
PhotoSwipe异步动态加载图片方法
2016/08/25 Javascript
给easyui datebox扩展一个清空的实例
2016/11/09 Javascript
EditPlus中的正则表达式 实战(2)
2016/12/15 Javascript
jQuery实现的省市联动菜单功能示例【测试可用】
2017/01/13 Javascript
d3.js实现立体柱图的方法详解
2017/04/28 Javascript
angular中ui calendar的一些使用心得(推荐)
2017/11/03 Javascript
vue计算属性computed、事件、监听器watch的使用讲解
2019/01/21 Javascript
python多线程threading.Lock锁用法实例
2014/11/01 Python
Django多数据库配置及逆向生成model教程
2020/03/28 Python
Python的3种运行方式:命令行窗口、Python解释器、IDLE的实现
2020/10/10 Python
css3绘制百度的小度熊
2018/10/29 HTML / CSS
兰蔻加拿大官方网站:Lancome加拿大
2016/08/05 全球购物
厂区绿化方案
2014/05/08 职场文书
在校大学生自我评价范文
2014/09/12 职场文书
森马旗舰店双十一营销方案
2014/09/29 职场文书
公务员群众路线心得体会
2014/11/03 职场文书
大学学生会辞职信
2015/05/13 职场文书
幼儿园毕业致辞
2015/07/29 职场文书
2016春节放假通知范文
2015/08/18 职场文书
2019职场单身人才调研报告:互联网行业单身比例最高
2019/08/07 职场文书
pytorch DataLoader的num_workers参数与设置大小详解
2021/05/28 Python
Win11任务栏无法正常显示 资源管理器不停重启的解决方法
2022/07/07 数码科技