防止动态加载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的ajax jsonp的使用解惑
Oct 09 Javascript
jquery中的查找parents与closest方法之间的区别
Dec 02 Javascript
jquery改变disabled的boolean状态的三种方法
Dec 13 Javascript
Javascript写入txt和读取txt文件示例
Feb 12 Javascript
JQuery实现动态适时改变字体颜色的方法
Mar 10 Javascript
Bootstrap组件系列之福利篇几款好用的组件(推荐)
Jun 23 Javascript
JavaScript DOM节点操作方法总结
Aug 23 Javascript
基于Bootstrap实现城市三级联动
Nov 23 Javascript
.vue文件 加scoped 样式不起作用的解决方法
May 28 Javascript
微信小程序实现默认第一个选中变色效果
Jul 17 Javascript
如何通过shell脚本自动生成vue文件详解
Sep 10 Javascript
el-table树形表格表单验证(列表生成序号)
May 31 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+DBM的同学录程序(5)
2006/10/09 PHP
PHP页面间传递参数实例代码
2008/06/05 PHP
《PHP编程最快明白》第二讲 数字、浮点、布尔型、字符串和数组
2010/11/01 PHP
[原创]php正则删除html代码中class样式属性的方法
2017/05/24 PHP
Thinkphp5.0 框架的请求方式与响应方式分析
2019/10/14 PHP
Javascript客户端脚本的设计和应用
2006/08/21 Javascript
javascript写的简单的计算器,内容很多,方法实用,推荐
2011/12/29 Javascript
JavaScript 实现鼠标拖动元素实例代码
2014/02/24 Javascript
JS小游戏之仙剑翻牌源码详解
2014/09/25 Javascript
JQuery的Ajax中Post方法传递中文出现乱码的解决方法
2014/10/21 Javascript
深入探讨javascript中的数据类型
2015/03/04 Javascript
Jquery插件easyUi实现表单验证示例
2015/12/15 Javascript
js实现select二级联动下拉菜单
2020/04/17 Javascript
javascript日期比较方法实例分析
2016/06/17 Javascript
ES6所改良的javascript“缺陷”问题
2016/08/23 Javascript
Angularjs 实现一个幻灯片示例代码
2016/09/08 Javascript
探究JavaScript中的五种事件处理程序方式
2016/12/07 Javascript
jquery.validate.js 多个相同name的处理方式
2017/07/10 jQuery
vue.js vue-router如何实现无效路由(404)的友好提示
2017/12/20 Javascript
babel7.x和webpack4.x配置vue项目的方法步骤
2019/05/12 Javascript
react 移动端实现列表左滑删除的示例代码
2019/07/04 Javascript
浅谈element中InfiniteScroll按需引入的一点注意事项
2020/06/05 Javascript
基于element-ui对话框el-dialog初始化的校验问题解决
2020/09/11 Javascript
用Python编写简单的微博爬虫
2016/03/04 Python
Python实现获取本地及远程图片大小的方法示例
2018/07/21 Python
CSS3制作炫酷的自定义发光文字
2016/03/28 HTML / CSS
Richards网上商店:当代时尚,遍布巴西
2019/11/03 全球购物
教师求职信范文分享
2013/12/27 职场文书
会计学习心得体会
2014/09/09 职场文书
酒店管理专业毕业生自我鉴定
2014/09/29 职场文书
留学推荐信(中英文版)
2015/03/26 职场文书
项目技术负责人岗位职责
2015/04/13 职场文书
学历证明范文
2015/06/16 职场文书
运动会闭幕式主持词
2015/07/01 职场文书
vue3不同环境下实现配置代理
2022/05/25 Vue.js
Python绘制散点图之可视化神器pyecharts
2022/07/07 Python