防止动态加载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 相关文章推荐
javascript实现二分查找法实现代码
Nov 12 Javascript
可以用来调试JavaScript错误的解决方案
Aug 07 Javascript
js实现俄罗斯方块小游戏分享
Jan 31 Javascript
html的DOM中Event对象onabort事件用法实例
Jan 21 Javascript
javascript变量声明实例分析
Apr 25 Javascript
JavaScript中使用自然对数ln的方法
Jun 14 Javascript
完美的js图片轮换效果
Feb 05 Javascript
js实现tab切换效果
Feb 16 Javascript
如何使用Bootstrap 按钮实例详解
Mar 29 Javascript
详解前端路由实现与react-router使用姿势
Aug 07 Javascript
JS中使用textPath实现线条上的文字
Dec 25 Javascript
微信小程序实现列表页的点赞和取消点赞功能
Nov 02 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防止sql注入代码实例
2013/12/18 PHP
phpstorm编辑器乱码问题解决
2014/12/01 PHP
Laravel中间件实现原理详解
2016/10/09 PHP
php中如何执行linux命令详解
2018/11/06 PHP
PHP的imageTtfText()函数深入详解
2021/03/03 PHP
node.js实现爬虫教程
2020/08/25 Javascript
jQuery设置单选按钮radio选中/不可用的实例代码
2016/06/24 Javascript
JavaScript实现的select点菜功能示例
2017/01/16 Javascript
Jquery实时监听input value的实例
2017/01/26 Javascript
js实现年月日表单三级联动
2020/04/17 Javascript
使用Angular CLI从蓝本生成代码详解
2018/03/24 Javascript
JS求Number类型数组中最大元素方法
2018/04/08 Javascript
Vue $emit $refs子父组件间方法的调用实例
2018/09/12 Javascript
mpvue开发音频类小程序踩坑和建议详解
2019/03/12 Javascript
基于layui实现高级搜索(筛选)功能
2019/07/26 Javascript
node 解析图片二维码的内容代码实例
2019/09/11 Javascript
[09:59]DOTA2-DPC中国联赛2月7日Recap集锦
2021/03/11 DOTA
python读取并定位excel数据坐标系详解
2019/06/26 Python
Python3标准库之threading进程中管理并发操作方法
2020/03/30 Python
4行Python代码生成图像验证码(2种)
2020/04/07 Python
Python调用ffmpeg开源视频处理库,批量处理视频
2020/11/16 Python
HTML5之WebGL 3D概述(下)—借助类库开发及框架介绍
2013/01/31 HTML / CSS
SneakerStudio英国:最佳运动鞋商店
2019/05/22 全球购物
Java面试题及答案
2012/09/08 面试题
银行营业厅大堂经理岗位职责
2014/01/06 职场文书
小学教师听课制度
2014/02/01 职场文书
高三政治教学反思
2014/02/06 职场文书
小学语文教学反思
2014/02/10 职场文书
外贸采购员岗位职责
2014/03/08 职场文书
入党自荐书范文
2014/03/09 职场文书
李开复演讲稿
2014/05/24 职场文书
汽车专业求职信
2014/06/05 职场文书
2014年初一班主任工作总结
2014/11/08 职场文书
春节慰问信范文
2015/02/15 职场文书
死磕 java同步系列之synchronized解析
2021/06/28 Java/Android
Mongo服务重启异常问题的处理方法
2021/07/01 MongoDB