防止动态加载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 相关文章推荐
下载文件个别浏览器文件名乱码解决办法
Mar 19 Javascript
jquery获取颜色在ie和ff下的区别示例介绍
Mar 28 Javascript
JavaScript调用ajax获取文本文件内容实现代码
Mar 28 Javascript
如何书写高质量jQuery代码(使用jquery性能问题)
Jun 30 Javascript
JavaScript设计模式之观察者模式(发布者-订阅者模式)
Sep 24 Javascript
js判断移动端是否安装某款app的多种方法
Dec 18 Javascript
关于数据与后端进行交流匹配(点亮星星)
Aug 03 Javascript
javascript函数中的3个高级技巧
Sep 22 Javascript
JavaScript 字符串常用操作小结(非常实用)
Nov 30 Javascript
JS实现图片点击后出现模态框效果
May 03 Javascript
图片文字识别(OCR)插件Ocrad.js教程
Nov 26 Javascript
Vue项目从webpack3.x升级webpack4不完全指南
Apr 28 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删除目录及目录下所有文件的方法详解
2013/06/06 PHP
DOM XPATH获取img src值的query
2013/09/23 PHP
用 Composer构建自己的 PHP 框架之使用 ORM
2014/10/30 PHP
js代码实现微博导航栏
2015/07/30 PHP
PHP数学运算与数据处理实例分析
2016/04/01 PHP
laravel 5.3 单用户登录简单实现方法
2019/10/14 PHP
PHP 使用位运算实现四则运算的代码
2021/03/09 PHP
js字符串转换成xml对象并使用技巧解读
2013/04/18 Javascript
js arguments,jcallee caller用法总结
2013/11/30 Javascript
JavaScript字符串对象substr方法入门实例(用于截取字符串)
2014/10/16 Javascript
JS实现控制表格只显示行边框或者只显示列边框的方法
2015/03/31 Javascript
javascript处理a标签超链接默认事件的方法
2015/06/29 Javascript
深入探究使JavaScript动画流畅的一些方法
2015/06/30 Javascript
解决JS请求服务器gbk文件乱码的问题
2015/10/16 Javascript
jquery特效 点击展示与隐藏全文
2015/12/09 Javascript
js实现年月日表单三级联动
2020/04/17 Javascript
详解用vue编写弹出框组件
2017/07/04 Javascript
nodejs密码加密中生成随机数的实例代码
2017/07/17 NodeJs
js实现随机点名小功能
2017/08/17 Javascript
200行代码实现blockchain 区块链实例详解
2018/03/14 Javascript
关于Angularjs中自定义指令一些有价值的细节和技巧小结
2018/04/22 Javascript
详解Angular路由之路由守卫
2018/05/10 Javascript
JS简单判断是否在微信浏览器打开的方法示例
2019/01/08 Javascript
vue 项目 iOS WKWebView 加载
2019/04/17 Javascript
javascript canvas API内容整理
2020/02/16 Javascript
加速vue组件渲染之性能优化
2020/04/09 Javascript
PyQt5每天必学之创建窗口居中效果
2018/04/19 Python
selenium+python环境配置教程详解
2019/05/28 Python
python编写微信公众号首图思路详解
2019/12/13 Python
Python面向对象程序设计之类和对象、实例变量、类变量用法分析
2020/03/23 Python
解析Tensorflow之MNIST的使用
2020/06/30 Python
python 解决selenium 中的 .clear()方法失效问题
2020/09/01 Python
Hanro官网:奢华男士和女士内衣、睡衣和家居服
2018/10/25 全球购物
单位办理社保介绍信
2014/01/10 职场文书
挂牌仪式策划方案
2014/05/18 职场文书
2015年专项整治工作总结
2015/04/03 职场文书