防止动态加载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 相关文章推荐
js下获得客户端操作系统的函数代码(1:vista,2:windows7,3:2000,4:xp,5:2003,6:2008)
Oct 31 Javascript
jquery无缝向上滚动实现代码
Mar 29 Javascript
兼容IE和Firefox火狐的上下、左右循环无间断滚动JS代码
Apr 19 Javascript
解析使用JS 清空File控件的路径值
Jul 08 Javascript
js时间戳格式化成日期格式的多种方法
Nov 11 Javascript
jquery 获取dom固定元素 添加样式的简单实例
Feb 04 Javascript
jQuery EasyUI中DataGird动态生成列的方法
Apr 05 Javascript
JavaScript队列、优先队列与循环队列
Nov 14 Javascript
浅谈JS读取DOM对象(标签)的自定义属性
Nov 21 Javascript
利用NPM淘宝的node.js镜像加速nvm
Mar 27 Javascript
[js高手之路]HTML标签解释成DOM节点的实现方法
Aug 31 Javascript
浅谈JavaScript的innerWidth与innerHeight
Oct 12 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源代码加密?PHP二进制加密与解密的解决办法
2013/04/22 PHP
解析phpstorm + xdebug 远程断点调试
2013/06/20 PHP
PHP判断是手机端还是PC端 PHP判断是否是微信浏览器
2017/03/15 PHP
PHP与Perl之间知识点区别整理
2019/03/19 PHP
js操作select控件的几种方法
2010/06/02 Javascript
一个关于jqGrid使用的小例子(行按钮)
2011/11/04 Javascript
在新窗口打开超链接的方法小结
2013/04/14 Javascript
javascript内存管理详细解析
2013/11/11 Javascript
利用JS进行图片的切换即特效展示图片
2013/12/03 Javascript
IE6-8中Date不支持toISOString的修复方法
2014/05/04 Javascript
jQuery表格插件datatables用法总结
2014/09/05 Javascript
javascript解析json实例详解
2014/11/05 Javascript
5个书写JavaScript代码的坏习惯,看看你中枪了没?
2014/11/06 Javascript
JS获取字符串实际长度(包含汉字)的简单方法
2016/08/11 Javascript
javascript实现获取指定精度的上传文件的大小简单实例
2016/10/25 Javascript
Node错误处理笔记之挖坑系列教程
2018/06/05 Javascript
小谈angular ng deploy的实现
2020/04/07 Javascript
解决element-ui里的下拉多选框 el-select 时,默认值不可删除问题
2020/08/14 Javascript
vue element-ui中table合计指定列求和实例
2020/11/02 Javascript
详解ES6 中的Object.assign()的用法实例代码
2021/01/11 Javascript
jquery实现广告上下滚动效果
2021/03/04 jQuery
[55:25]VGJ.T vs Optic Supermajor小组赛D组 BO3 第三场 6.3
2018/06/04 DOTA
[01:20:47]DOTA2-DPC中国联赛 正赛 Ehome vs Magma BO3 第一场 1月19日
2021/03/11 DOTA
python使用os模块的os.walk遍历文件夹示例
2014/01/27 Python
使用Python操作excel文件的实例代码
2017/10/15 Python
Python2.7基于笛卡尔积算法实现N个数组的排列组合运算示例
2017/11/23 Python
PyQt5每天必学之带有标签的复选框
2018/04/19 Python
浅析Python函数式编程
2018/10/06 Python
numpy库与pandas库axis=0,axis= 1轴的用法详解
2019/05/27 Python
python实现飞机大战游戏(pygame版)
2020/10/26 Python
jupyter notebook实现显示行号
2020/04/13 Python
TensorFLow 数学运算的示例代码
2020/04/21 Python
汽车专业毕业生自荐信
2013/11/03 职场文书
反腐倡廉影片观后感
2015/06/08 职场文书
新人入职感言
2015/07/31 职场文书
MySQL优化常用的19种有效方法(推荐!)
2022/03/17 MySQL