解决 IE6 内存泄露的另类方法
作者:blank 来源:怿飞blog 时间:2008-07-06 23:05:00
Hedger Wang 在国内 blog 上得到的方法:使用 try … finally 结构来使对象最终为 null ,以阻止内存泄露。
其中举了个例子:
function createButton() {
var obj = document.createElement("button");
obj.innerHTML = "click me";
obj.onclick = function() {
//handle onclick
}
obj.onmouseover = function() {
//handle onmouseover
}
return obj;//return a object which has memory leak problem in IE6
}
var dButton = document.getElementsById("d1").appendChild(createButton());
//skipped....
对于 IE6 中,引起内存泄露的原因,可看《Understanding and Solving Internet Explorer Leak Patterns》一文。
上面的例子,应该属于上文中的 “Closures”原因。
再看下用 try … finally 的解决方法:
/**
* Use the try ... finally statement to resolve the memory leak issue
*/
function createButton() {
var obj = document.createElement("button");
obj.innerHTML = "click me";
obj.onclick = function() {
//handle onclick
}
obj.onmouseover = function() {
//handle onmouseover
}
//this helps to fix the memory leak issue
try {
return obj;
} finally {
obj = null;
}
}
var dButton = document.getElementsById("d1").appendChild(createButton());
//skipped....
可能大家有疑问: finally 是如何解析的呢?
答案是:先执行 try 语句再执行 finally 语句。
例如:
function foo() {
var x = 0;
try {
return print("call return " + (++x));
} finally {
print("call finally " + (++x));
}
}
print('before');
print(foo());
print('after');
返回的结果为:
print » before
print » call return 1
print » call finally 2
print » true
print » after
更多详细的演示:《Finally, the alternative fix for IE6’s memory leak is available》
标签:内存,ie,方法,浏览器
0
投稿
猜你喜欢
Python开发毕设案例之桌面学生信息管理程序
2021-03-02 14:56:08
Vue.js添加组件操作示例
2024-05-11 09:16:32
yolov5返回坐标的方法实例
2023-10-05 20:09:43
人工神经网络算法知识点总结
2023-05-16 11:36:06
最新IntelliJ IDEA 2020.2永久激活码(亲测有效)
2023-07-09 01:45:14
javascript面向对象三大特征之封装实例详解
2023-08-23 21:39:04
关于Python中 循环器 itertools的介绍
2023-11-23 02:48:21
python3 kubernetes api的使用示例
2021-11-11 00:56:18
mysql分表和分区的区别浅析
2024-01-23 13:43:16
SQL Server错误代码大全及解释(留着备用)
2024-01-14 07:08:44
SQL Server数据库连接查询的种类及其应用
2009-01-06 11:28:00
mysql5.58的编译安装
2011-01-29 16:26:00
Python使用requests及BeautifulSoup构建爬虫实例代码
2021-08-13 11:33:13
python 5个顶级异步框架推荐
2021-12-23 06:21:47
通过 for 循环比较 Python 与 Ruby 的编程区别
2022-11-12 01:19:26
javascript生成大小写字母
2024-04-17 10:26:30
Python集成学习之Blending算法详解
2022-09-28 04:31:35
Python实现自动发送邮件功能
2021-04-01 14:41:55
python实现rsa加密实例详解
2021-08-24 03:32:51
javascript中传统事件与现代事件
2024-04-10 11:02:57