防止动态加载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 简单导航实现代码
Sep 11 Javascript
js 中 document.createEvent的用法
Aug 29 Javascript
JS图片切换的具体方法(带缩略图版)
Nov 12 Javascript
JS注释所产生的bug 即使注释也会执行
Nov 19 Javascript
JS定义网页表单提交(submit)的方法
Mar 20 Javascript
jQuery常用且重要方法汇总
Jul 13 Javascript
基于jQuery实现收缩展开功能
Mar 18 Javascript
Bootstrap基本插件学习笔记之模态对话框(16)
Dec 08 Javascript
JavaScript中闭包的详解
Apr 01 Javascript
详解vue2.0 transition 多个元素嵌套使用过渡
Jun 19 Javascript
jQuery实现的滑块滑动导航效果示例
Jun 04 jQuery
vue数组对象排序的实现代码
Jun 20 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
php提示Call-time pass-by-reference has been deprecated in的解决方法[已测]
2012/05/06 PHP
PHP使用pdo连接access数据库并循环显示数据操作示例
2018/06/05 PHP
利用google提供的API(JavaScript接口)获取网站访问者IP地理位置的代码详解
2010/07/24 Javascript
Document对象内容集合(比较全)
2010/09/06 Javascript
js判断生效时间不得大于失效时间的思路及代码
2013/04/23 Javascript
raphael.js绘制中国地图 地图绘制方法
2014/02/12 Javascript
jQuery实现无限往下滚动效果代码
2016/04/16 Javascript
Extjs让combobox写起来简洁又漂亮
2017/01/05 Javascript
干货!教大家如何选择Vue和React
2017/03/13 Javascript
VUE实现日历组件功能
2017/03/13 Javascript
JavaScript生成指定范围的时间列表
2018/03/19 Javascript
详解如何创建并发布一个 vue 组件
2018/11/08 Javascript
如何在微信小程序里面退出小程序的方法
2019/04/28 Javascript
vue开发拖拽进度条滑动组件
2019/09/21 Javascript
小程序实现上下移动切换位置
2019/09/23 Javascript
vuex actions异步修改状态的实例详解
2019/11/06 Javascript
微信小程序实现拨打电话功能的示例代码
2020/06/28 Javascript
Python 3.x 连接数据库示例(pymysql 方式)
2017/01/19 Python
python 连接各类主流数据库的实例代码
2018/01/30 Python
Python从list类型、range()序列简单认识类(class)【可迭代】
2019/05/31 Python
python实现引用其他路径包里面的模块
2020/03/09 Python
keras用auc做metrics以及早停实例
2020/07/02 Python
html5 input属性使用示例
2013/06/28 HTML / CSS
Mountain Hardwear官网:攀岩服装和户外装备
2019/09/26 全球购物
什么是smarty? Smarty的优点是什么?
2013/08/11 面试题
抽象方法、抽象类怎样声明
2014/10/25 面试题
策划总监岗位职责
2014/02/16 职场文书
护士岗前培训自我评鉴
2014/02/28 职场文书
商务经理岗位职责
2014/08/03 职场文书
2015年艾滋病防治工作总结
2015/05/22 职场文书
怎样写观后感
2015/06/19 职场文书
《浅水洼里的小鱼》教学反思
2016/02/16 职场文书
检讨书格式
2019/04/25 职场文书
mysql事务隔离级别详情
2021/10/24 MySQL
Python Pandas解析读写 CSV 文件
2022/04/11 Python
MySQL中LAG()函数和LEAD()函数的使用
2022/08/14 MySQL