论坛首页 Web前端技术论坛

动态script加载数据

浏览 2854 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2009-09-03  
Neil Fraser文章看得糊里糊涂,e文不是很好...

一般我们加载数据会生成一个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/

网名: 天堂左我往右
   发表时间: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

 

0 请登录后投票
   发表时间: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

0 请登录后投票
   发表时间: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

不是,我的帖子发表时间早于楼主的这篇,不过里面的谈到的那个老外是一个人~

 

0 请登录后投票
   发表时间: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并没有起到实际的作用

 

0 请登录后投票
   发表时间: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年了也没出过问题,也许内存泄漏是很轻微的...
0 请登录后投票
   发表时间: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掉对象,不妨看看我的博客:再次探讨内存泄露

 

0 请登录后投票
论坛首页 Web前端技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics