防止动态加载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 学习6 操纵元素显示效果的函数
Feb 07 Javascript
JS实现将人民币金额转换为大写的示例代码
Feb 13 Javascript
jQuery验证插件validation使用指南
Apr 21 Javascript
JQuery实现超链接鼠标提示效果的方法
Jun 10 Javascript
JS判断元素是否在数组内的实现代码
Mar 30 Javascript
JavaScript中split与join函数的进阶使用技巧
May 03 Javascript
使用vue编写一个点击数字计时小游戏
Aug 31 Javascript
使用bootstrap-paginator.js 分页来进行ajax 异步分页请求示例
Mar 09 Javascript
vue组件学习教程
Sep 09 Javascript
微信小程序项目实践之验证码倒计时功能
Jul 18 Javascript
微信小程序swiper实现文字纵向轮播提示效果
Jan 21 Javascript
vue监听滚动事件的方法
Dec 21 Vue.js
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者的疑难问答(1)
2006/10/09 PHP
PHP 和 MySQL 开发的 8 个技巧
2007/01/02 PHP
php压缩多个CSS为一个css的代码并缓存
2011/04/21 PHP
php实现的简易扫雷游戏实例
2015/07/09 PHP
PDO::setAttribute讲解
2019/01/29 PHP
如何用javascript判断录入的日期是否合法
2007/01/08 Javascript
超级退弹代码
2008/07/07 Javascript
JQuery CSS样式控制 学习笔记
2009/07/23 Javascript
jquery.qrcode在线生成二维码使用示例
2013/08/21 Javascript
超简单JS二级、多级联动的简单实例
2014/02/18 Javascript
Chrome下ifame父窗口调用子窗口的问题示例探讨
2014/03/17 Javascript
点击button获取text内容并改变样式的js实现
2014/09/09 Javascript
jQuery绑定事件on()与弹窗的简要概述
2016/04/27 Javascript
JS采用绝对定位实现回到顶部效果完整实例
2016/06/20 Javascript
layer.confirm取消按钮绑定事件的方法
2018/08/17 Javascript
Node.js实现一个HTTP服务器的方法示例
2019/05/13 Javascript
vue和iview实现Scroll 数据无限滚动功能
2019/10/31 Javascript
Python实现的几个常用排序算法实例
2014/06/16 Python
十条建议帮你提高Python编程效率
2016/02/16 Python
python 下 CMake 安装配置 OPENCV 4.1.1的方法
2019/09/30 Python
使用Tensorflow将自己的数据分割成batch训练实例
2020/01/20 Python
Python 存取npy格式数据实例
2020/07/01 Python
投标单位介绍信
2014/01/09 职场文书
经销商会议欢迎词
2014/01/11 职场文书
医药学专业大学生职业生涯规划书论文
2014/01/21 职场文书
高中运动会入场词
2014/02/14 职场文书
《油菜花开了》教学反思
2014/02/22 职场文书
建筑投标担保书
2014/05/20 职场文书
关于保护环境的建议书
2014/08/26 职场文书
2014老师三严三实对照检查材料思想汇报
2014/09/18 职场文书
法院个人总结
2015/03/03 职场文书
2015年世界粮食日演讲稿
2015/03/20 职场文书
工程催款通知书
2015/04/17 职场文书
烈士陵园扫墓感想
2015/08/07 职场文书
幼儿园老师新年寄语
2015/08/17 职场文书
《最后一头战象》读后感:动物也有感情
2020/01/02 职场文书