防止动态加载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的实现原理的模拟代码 -1 核心部分
Aug 01 Javascript
用jquery统计子菜单的条数示例代码
Oct 18 Javascript
AJAX跨域请求json数据的实现方法
Nov 11 Javascript
JS 获取鼠标左右键的键值方法
Oct 11 Javascript
javascript中数组方法汇总
Jul 07 Javascript
jQuery文字横向滚动效果的实现代码
May 31 Javascript
Javascript基础_嵌入图像的简单实现
Jun 14 Javascript
基于vue实现swipe轮播组件实例代码
May 24 Javascript
requirejs按需加载angularjs文件实例
Jun 08 Javascript
详解如何将 Vue-cli 改造成支持多页面的 history 模式
Nov 20 Javascript
vue拦截器实现统一token,并兼容IE9验证功能
Apr 26 Javascript
js中的reduce()函数讲解
Jan 18 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 日志缩略名的创建函数代码
2010/05/26 PHP
PHP中list方法用法示例
2016/12/01 PHP
javascript打开新窗口同时关闭旧窗口
2009/01/16 Javascript
dropdownlist之间的互相联动实现(显示与隐藏)
2009/11/24 Javascript
jQuery学习笔记之Helloworld
2010/12/22 Javascript
浅析Node.js查找字符串功能
2014/09/03 Javascript
使用AngularJS对路由进行安全性处理的方法
2015/06/18 Javascript
Jquery检验手机号是否符合规则并根据手机号检测结果将提交按钮设为不同状态
2015/11/26 Javascript
全屏滚动插件fullPage.js使用实例解析
2016/10/21 Javascript
Javascript 普通函数和构造函数的区别
2016/11/05 Javascript
jQuery select自动选中功能实现方法分析
2016/11/28 Javascript
jQuery查找和过滤_动力节点节点Java学院整理
2017/07/04 jQuery
AngularJs 最新验证手机号码的实例,成功测试通过
2017/11/26 Javascript
解决Jquery下拉框数据动态获取的问题
2018/01/25 jQuery
完美解决axios在ie下的兼容性问题
2018/03/05 Javascript
vue 实现全选全不选的示例代码
2018/03/29 Javascript
AngularJS $http post 传递参数数据的方法
2018/10/09 Javascript
JS浮点数运算结果不精确的Bug解决
2019/08/01 Javascript
Node.js实现简单管理系统
2019/09/23 Javascript
vue实现一个6个输入框的验证码输入组件功能的实例代码
2020/06/29 Javascript
ant design的table组件实现全选功能以及自定义分页
2020/11/17 Javascript
Python编写登陆接口的方法
2017/07/10 Python
对python list 遍历删除的正确方法详解
2018/06/29 Python
浅述python中深浅拷贝原理
2018/09/18 Python
Django 数据库同步操作技巧详解
2019/07/19 Python
pytorch 可视化feature map的示例代码
2019/08/20 Python
利用Python自动化操作AutoCAD的实现
2020/04/01 Python
python如何求圆的面积
2020/07/01 Python
Python字符串查找基本操作代码案例
2020/10/27 Python
CSS3 3D立方体效果示例-transform也不过如此
2016/12/05 HTML / CSS
CSS3中的常用选择器使用示例整理
2016/06/13 HTML / CSS
简历中个人求职的自我评价模板
2013/11/29 职场文书
幼儿园运动会入场词
2014/02/10 职场文书
岗位廉政承诺书
2014/03/27 职场文书
体育馆的标语
2014/06/24 职场文书
个人投资合作协议书
2014/10/12 职场文书