防止动态加载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 相关文章推荐
短信提示使用 特效
Jan 19 Javascript
传智播客学习之java 反射
Nov 22 Javascript
TypeScript 学习笔记之基本类型
Jun 19 Javascript
使用AmplifyJS组件配合JavaScript进行编程的指南
Jul 28 Javascript
JavaScript编程中window的location与history对象详解
Oct 26 Javascript
node.js中的事件处理机制详解
Nov 26 Javascript
Node.js websocket使用socket.io库实现实时聊天室
Feb 20 Javascript
简单实现vue验证码60秒倒计时功能
Oct 11 Javascript
Node.js的Koa实现JWT用户认证方法
May 05 Javascript
关于js的三种使用方式(行内js、内部js、外部js)的程序代码
May 05 Javascript
详解在Vue中使用TypeScript的一些思考(实践)
Jul 06 Javascript
在layui中layer弹出层点击事件无效的解决方法
Sep 05 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/16 PHP
php cookies中删除的一般赋值方法
2011/05/07 PHP
php将字符串全部转换成大写或者小写的方法
2015/03/17 PHP
Yii2使用表单上传文件的实例代码
2017/08/03 PHP
js FLASH幻灯片字符串中有连接符&的处理方法
2012/03/01 Javascript
div模拟滚动条效果示例代码
2013/10/16 Javascript
JavaScript字符串对象toUpperCase方法入门实例(用于把字母转换为大写)
2014/10/17 Javascript
javascript操作符"!~"详解
2015/02/10 Javascript
JavaScript中的toLocaleLowerCase()方法使用详解
2015/06/06 Javascript
js淡入淡出的图片轮播效果代码分享
2015/08/24 Javascript
如何根据百度地图计算出两地之间的驾驶距离(两种语言js和C#)
2015/10/29 Javascript
推荐阅读的js快速判断IE浏览器(兼容IE10与IE11)
2015/12/13 Javascript
js实现5秒倒计时重新发送短信功能
2017/02/05 Javascript
jQuery实现html双向绑定功能示例
2017/10/09 jQuery
javascript 判断用户有没有操作页面
2017/10/17 Javascript
Angular脚手架开发的实现步骤
2019/04/09 Javascript
Vue实现按钮级权限方案
2019/11/21 Javascript
js实现文章目录索引导航(table of content)
2020/05/10 Javascript
JavaScript实现沿五角星形线摆动的小圆实例详解
2020/07/28 Javascript
记录一次websocket封装的过程
2020/11/23 Javascript
使用Python读取大文件的方法
2018/02/11 Python
Python实现定时精度可调节的定时器
2018/04/15 Python
django2用iframe标签完成网页内嵌播放b站视频功能
2018/06/20 Python
Python如何发布程序的详细教程
2018/10/09 Python
python中如何使用insert函数
2020/01/09 Python
浙大网新C/C++面试解惑
2015/05/27 面试题
通信工程专业毕业生推荐信
2013/12/25 职场文书
销售演讲稿范文
2014/01/08 职场文书
致800米运动员广播稿
2014/02/16 职场文书
2015年计生协会工作总结
2015/04/24 职场文书
邹越演讲观后感
2015/06/15 职场文书
如何制定销售人员薪酬制度?
2019/07/09 职场文书
致创业您:正能量激励人心句子(48条)
2019/08/15 职场文书
用Python提取PDF表格的方法
2021/04/11 Python
Redis 中使用 list,streams,pub/sub 几种方式实现消息队列的问题
2022/03/16 Redis
python数字图像处理实现图像的形变与缩放
2022/06/28 Python