防止动态加载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进行跨域请求
Jan 25 Javascript
JSON 学习之JSON in JavaScript详细使用说明
Feb 23 Javascript
select标签模拟/美化方法采用JS外挂式插件
Apr 01 Javascript
js时间戳格式化成日期格式的多种方法
Nov 11 Javascript
jquery.cookie用法详细解析
Dec 18 Javascript
node.js中的fs.readdirSync方法使用说明
Dec 17 Javascript
简述Jquery与DOM对象
Jul 10 Javascript
Jquery实现纵向横向菜单
Jan 24 Javascript
Javascript基础_标记文字的实现方法
Jun 14 Javascript
Vue keep-alive实践总结(推荐)
Aug 31 Javascript
使用vue-cli3+typescript的项目模板创建工程的教程
Feb 28 Javascript
vue.js实现点击图标放大离开时缩小的代码
Jan 27 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引用地址改变变量值的问题
2012/03/23 PHP
使用PHP实现下载CSS文件中的图片
2015/12/06 PHP
Laravel中基于Artisan View扩展包创建及删除应用视图文件的方法
2016/10/08 PHP
PHP7 foreach() 函数修改
2021/03/09 PHP
Javascript学习笔记 delete运算符
2011/09/13 Javascript
jquery实现商品拖动选择效果代码(自写)
2013/05/28 Javascript
jquery 简单应用示例总结
2013/08/09 Javascript
jquery设置text的值示例(设置文本框 DIV 表单值)
2014/01/06 Javascript
2014最热门的JavaScript代码高亮插件推荐
2014/11/25 Javascript
JavaScript动态插入CSS的方法
2015/12/10 Javascript
window.onload绑定多个事件的两种解决方案
2016/05/15 Javascript
JS 通过系统时间限定动态添加 select option的实例代码
2016/06/09 Javascript
详谈Angular 2+ 的表单(一)之模板驱动型表单
2017/04/25 Javascript
vue实现百度搜索下拉提示功能实例
2017/06/14 Javascript
Angular 4中如何显示内容的CSS样式示例代码
2017/11/06 Javascript
angular 服务随记小结
2019/05/06 Javascript
使用layer模态框给新页面传值的方法
2019/09/27 Javascript
Python迭代器和生成器定义与用法示例
2018/02/10 Python
对pandas里的loc并列条件索引的实例讲解
2018/11/15 Python
Python设计模式之建造者模式实例详解
2019/01/17 Python
Pytorch 神经网络—自定义数据集上实现教程
2020/01/07 Python
Python Dataframe常见索引方式详解
2020/05/27 Python
python3.6中anaconda安装sklearn踩坑实录
2020/07/28 Python
python 制作网站筛选工具(附源码)
2021/01/21 Python
英国最大的汽车交易网站:Auto Trader UK
2016/09/23 全球购物
承诺书怎么写
2014/03/26 职场文书
实习推荐信
2014/05/10 职场文书
支部组织生活会方案
2014/06/10 职场文书
高中学校对照检查材料
2014/08/31 职场文书
结婚老公保证书
2015/02/26 职场文书
接待员岗位职责范本
2015/04/15 职场文书
董事会决议范本
2015/07/01 职场文书
三年级作文之小小梦想
2019/12/06 职场文书
PHP控制循环操作的时间
2021/04/01 PHP
python机器学习实现oneR算法(以鸢尾data为例)
2022/03/03 Python
ubuntu安装jupyter并设置远程访问的实现
2022/03/31 Python