浏览 2885 次
锁定老帖子 主题:动态script加载数据
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2009-09-03
一般我们加载数据会生成一个script标签,在onload事件里remove掉,或者在jsonp回调函数中remove掉script标签,取得数据 这样其实script占用的内存并没有释放,必须: for (var prop in jsFile) { delete jsFile[prop]; } ie下不能delete native对象的属性,Neil Fraser给出的解决方法是,ie下只用一个script标签... 原文地址:http://neil.fraser.name/news/2009/07/27/ 网名: 天堂左我往右 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2009-09-03
lixinlixin2008 写道
Neil Fraser文章看得糊里糊涂,e文不是很好...
一般我们加载数据会生成一个script标签,在onload事件里remove掉,或者在jsonp回调函数中remove掉script标签,取得数据 这样其实script占用的内存并没有释放,必须: for (var prop in jsFile) { delete jsFile[prop]; } ...... 我觉得楼主其实应该去测试一下,看作者的观点是不是正确的,我在另外一个帖子里面已经对Neil Fraser的观点提出质疑了:http://www.iteye.com/topic/459090
|
|
返回顶楼 | |
发表时间:2009-09-03
最后修改:2009-09-03
jquery里是这样的
window[ jsonp ] = function(tmp){ data = tmp; success(); complete(); // Garbage collect window[ jsonp ] = undefined; try{ delete window[ jsonp ]; } catch(e){} if ( head ) head.removeChild( script ); }; 好像没有对IE作专门处理或优化。而是避过 不知道在IE下是否真的会泄露, 还是共用一个节点吧。 这篇也是讲这个, 同一楼主? http://www.iteye.com/topic/459090 |
|
返回顶楼 | |
发表时间:2009-09-03
bencode 写道
jquery里是这样的
window[ jsonp ] = function(tmp){ data = tmp; success(); complete(); // Garbage collect window[ jsonp ] = undefined; try{ delete window[ jsonp ]; } catch(e){} if ( head ) head.removeChild( script ); }; 好像没有对IE作专门处理或优化。而是避过 不知道在IE下是否真的会泄露, 还是共用一个节点吧。 这篇也是讲这个, 同一楼主? http://www.iteye.com/topic/459090 不是,我的帖子发表时间早于楼主的这篇,不过里面的谈到的那个老外是一个人~
|
|
返回顶楼 | |
发表时间:2009-09-03
bencode 写道
jquery里是这样的
window[ jsonp ] = function(tmp){ data = tmp; success(); complete(); // Garbage collect window[ jsonp ] = undefined; try{ delete window[ jsonp ]; } catch(e){} if ( head ) head.removeChild( script ); }; 好像没有对IE作专门处理或优化。而是避过 不知道在IE下是否真的会泄露, 还是共用一个节点吧。 这篇也是讲这个, 同一楼主? http://www.iteye.com/topic/459090 http://www.iteye.com/topic/459090这篇里面的回帖的代码可以看看 至于delete到底有没有效果,我现在还是持怀疑态度,我做过测试,发现delete并没有起到实际的作用
|
|
返回顶楼 | |
发表时间:2009-09-06
bencode 写道 jquery里是这样的
window[ jsonp ] = function(tmp){ data = tmp; success(); complete(); // Garbage collect window[ jsonp ] = undefined; try{ delete window[ jsonp ]; } catch(e){} if ( head ) head.removeChild( script ); }; 好像没有对IE作专门处理或优化。而是避过 不知道在IE下是否真的会泄露, 还是共用一个节点吧。 这篇也是讲这个, 同一楼主? http://www.iteye.com/topic/459090 据Neil Fraser所说,是所有浏览器都会有问题,不单是IE,俺们公司的加载json的库也是script用过即remove,3年了也没出过问题,也许内存泄漏是很轻微的... |
|
返回顶楼 | |
发表时间:2009-09-07
lixinlixin2008 写道
bencode 写道
jquery里是这样的
window[ jsonp ] = function(tmp){ data = tmp; success(); complete(); // Garbage collect window[ jsonp ] = undefined; try{ delete window[ jsonp ]; } catch(e){} if ( head ) head.removeChild( script ); }; 好像没有对IE作专门处理或优化。而是避过 不知道在IE下是否真的会泄露, 还是共用一个节点吧。 这篇也是讲这个, 同一楼主? http://www.iteye.com/topic/459090 据Neil Fraser所说,是所有浏览器都会有问题,不单是IE,俺们公司的加载json的库也是script用过即remove,3年了也没出过问题,也许内存泄漏是很轻微的... 其实最好的方式是remove后在null掉对象,不妨看看我的博客:再次探讨内存泄露
|
|
返回顶楼 | |