防止动态加载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 遍历json数组的实现代码
Sep 22 Javascript
原创javascript小游戏实现代码
Aug 19 Javascript
js 静态动态成员 and 信息的封装和隐藏
May 29 Javascript
15个款优秀的 jQuery 图片特效插件推荐
Nov 21 Javascript
关于 jQuery Easyui异步加载tree的问题解析
Dec 06 Javascript
Bootstrap布局之栅格系统学习笔记
May 04 Javascript
JavaScript实现音乐自动切换和轮播
Nov 05 Javascript
webstorm和.vue中es6语法报错的解决方法
May 08 Javascript
vue监听对象及对象属性问题
Aug 20 Javascript
微信小程序自定义toast弹窗效果的实现代码
Nov 15 Javascript
webpack 如何解析代码模块路径的实现
Sep 04 Javascript
OpenLayers3实现鼠标移动显示坐标
Sep 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
php获取远程图片的两种 CURL方式和sockets方式获取远程图片
2011/11/07 PHP
php计算几分钟前、几小时前、几天前的几个函数、类分享
2014/04/09 PHP
php利用curl抓取新浪微博内容示例
2014/04/27 PHP
ThinkPHP Mobile使用方法简明教程
2014/06/18 PHP
Laravel 框架控制器 Controller原理与用法实例分析
2020/04/14 PHP
PHP设计模式(三)建造者模式Builder实例详解【创建型】
2020/05/02 PHP
jquery api参考 visualjquery 中国线路 速度快
2007/11/30 Javascript
jquery中获得$.ajax()事件返回的值并添加事件的方法
2010/04/15 Javascript
将两个div左右并列显示并实现点击标题切换内容
2013/10/22 Javascript
sails框架的学习指南
2014/12/22 Javascript
JavaScript数据类型检测代码分享
2015/01/26 Javascript
jQuery调取jSon数据并展示的方法
2015/01/29 Javascript
JS实现向表格中动态添加行的方法
2015/03/30 Javascript
js eval函数使用,js对象和字符串互转实例
2017/03/06 Javascript
Vuex 入门教程
2018/01/10 Javascript
element-ui 本地化使用教程详解
2019/10/28 Javascript
使用JavaScript计算前一天和后一天的思路详解
2019/12/20 Javascript
[10:21]DOTA2-DPC中国联赛 正赛 PSG.LGD vs Aster 选手采访
2021/03/11 DOTA
python 系统调用的实例详解
2017/07/11 Python
python实现泊松图像融合
2018/07/26 Python
python3模拟实现xshell远程执行liunx命令的方法
2019/07/12 Python
css3中检验表单的required,focus,valid和invalid样式
2014/02/21 HTML / CSS
CSS3区域模块region相关编写示例
2015/08/28 HTML / CSS
CSS3 实现发光边框特效
2020/11/11 HTML / CSS
html5教程实现Photoshop渐变色效果
2013/12/04 HTML / CSS
HTML5学习笔记之History API
2015/02/26 HTML / CSS
国际商务专业学生个人的自我评价
2013/09/28 职场文书
历史学专业个人的自我评价
2013/10/13 职场文书
七年级生物教学反思
2014/01/30 职场文书
交通事故委托书范本(2篇)
2014/09/21 职场文书
学生穿着不得体检讨书
2014/10/12 职场文书
技术员个人工作总结
2015/03/03 职场文书
2015年大学生社会实践评语
2015/03/26 职场文书
逃课检讨书范文
2015/05/06 职场文书
七年级作文之秋游
2019/10/21 职场文书
Vue Element-ui表单校验规则实现
2021/07/09 Vue.js