Oct 16
Ext2,不得不说给框架设计者带来方便,炫丽界面效果的背后也是代价的。
最近做的项目用了Ext做框架,也是看中页面好看、使用简单。开始还没发觉有什么不对的地方,随时功能模块的增加,内容的增多,发现系统用起来越慢,开始报Script不能释放,一看吓一跳,什么了,IE的使用高达几百M,用越久内存使用越高。
慢慢回来检查是什么回事,才发现是Iframe惹的祸。
IE、FireFox新增一个Iframe,不管是空的也好,也新占用5M的内存。
发设计时为了避免JS冲突,弹出窗口都是用Ext模态Iframe窗口,Tab也是Iframe方式,十几个Tab开起来,IE内存上到一百多M。再加功能也是Iframe弹出加载,点击的功能越多,开过的窗口越多,内存只升不降。在测试时,曾出现IE占用内存8百多M的情况。

寻找解决方案,这个是IE的Bug吧,内存无法回收。改Ext,在关闭时把新开的Iframe置空,把节点移除,也只空减轻崩溃的脚步,根本不顶用。不得放弃新开页使用Iframe的次数,改为传统的window.open。

为了这个加班改了N多页面,最终系统上线使用时,能不能真的顶得住还很难说。

Ext想说爱你不容易,我觉得最后还是放弃使用Ext,频繁使用的功能模块,使用Ext是不可取的。

除了使用一些AJax功能,其他都是那么华而不实,还是回归原始好!
Oct 16
Oct 10
使用Ext的Window打开新的内容页面,因为JS过多所在使用iframe方式引入,发现iframe关闭后,内存不释放,引起IE进程使用内存不断增加。
主要是因IE在关闭iframe后没有释放内存的原因,FireFox也是同的问题。

打开内容JS:

var win = null;
function showWindowIframeFix(tit,pageUrl,wid, hei){
  var time = new Date();
  if(pageUrl !="" && pageUrl.indexOf('?')>0){
    pageUrl +="&time="+time;
  }else{
    pageUrl +="?time="+time;
  }
  var iFrameObjId = "Ext2_iFrame_in_Tab_"+new Date().getTime();  
  win= new Ext.Window({title:tit,
      width:wid,
      height:hei,
      autoHeight:true,
      maximizable:true,
      modal:true,
      iFrameObjId:iFrameObjId,
      html:'<iframe  id="'+iFrameObjId+'" scrolling="auto" frameborder="0" width="'+(wid-15)+'" height="'+hei+'" src="'+pageUrl+'"></iframe>'});
win.show();
}


下面为把iframe置空,虽然效果有限,释放一点总比没有的好啊。
修改ext-all.js文件:

beforeDestroy : function() {
      if(this.iFrameObjId!=null && this.iFrameObjId.length>0){
        var iframeObj = document.getElementById(this.iFrameObjId);
        if(iframeObj){
            alert("remove iframe:"+iframeObj.id+" start");
            iframeObj.src="javascript:false";
            iframeObj.parentNode.removeChild(iframeObj);    
            iframeObj = null;
            CollectGarbage();    
        }        
        alert("remove iframe ok");        
      }      
      Ext.destroy(this.resizer, this.dd, this.proxy, this.mask);
      Ext.Window.superclass.beforeDestroy.call(this)
    },
Oct 8

<script type="text/javascript">
<!--
function getFlowNoDetail(id){  
  //alert(id);
  document.myform.nodeId.value= id;
  var url="${webRoot}/workflow/jsp/getNodeFieldDetail.action?nodeId="+id;  
  doRequest(url
   ,null
   ,function(result, request){
     //alert(result.responseText);      
    var ajaxResult=eval("("+result.responseText+")");  
    initCurrentNode(ajaxResult);  
    }
   ,null
   ,null
   ,false);
}

function initCurrentNode(flowNode){
  if(flowNode){
    var form=document.myform;
    
    var fieldnum = ${fieldnum};
    for (var i=0;i<form.elements.length;i++)
    {
    var e = form.elements[i];
    if (e.type=="radio" &amp;amp;amp;amp;&amp;amp;amp;amp; e.disabled==false)
       e.checked = false;
    }
    for(var i=0;i<flowNode.length;i++){
      try{
        //alert("from"+flowNode[i].fieldId);  
        //if(form.getElementById(flowNode[i].fieldId).value)    
        //fromTree.setNodeChecked(flowNode[i].nodeId,true);    
        var fieldId = flowNode[i].workflowOrderField.fieldId;
        
        var radiopowers = eval(myform.elements["power_"+fieldId]);
        for(var j=0;j<radiopowers.length;j++){
          
          if(radiopowers[j].value == flowNode[i].power){
            radiopowers[j].checked = true;
          }
        }
        
      }catch(e){}      
    }
    
  }
}

function batchConfig(){
  var form=document.myform;  
  if(form.nodeId.value==null &amp;amp;amp;amp;#124;&amp;amp;amp;amp;#124; form.nodeId.value==''){
    alert('当前未选中节点!');
    return ;
  }
  var powerstring = "";
  for (var i=0;i<form.elements.length;i++)
  {
    var e = form.elements[i];
    if ( e.type=="radio" &amp;amp;amp;amp;&amp;amp;amp;amp; e.checked)
       powerstring += e.id+"/"+e.value+"###";
  }  
  form.powerString.value = powerstring;
  doRequest("${webRoot}/workflow/jsp/nodePowerBatchSave.action"
   ,myform
   ,function(result, request){    
    var ajaxResult=eval(result.responseText);
    if(ajaxResult[0]=="SAVE_OK"){
      alert("操作成功!");    
    }else {
      alert(ajaxResult[1]);
    }
  },null
   ,null
   ,false);
}
//-->
</script>

Sep 10

<script language="JavaScript">
<!--
var imagepath="images/shop.gif"
var imagewidth=200 //这两行写图片的大小
var imageheight=90
var speed=3;
var imageclick="http://www.feyok.com/" //这里写点击图片连接到的地址
var hideafter=0
var isie=0;
if(window.navigator.appName=="Microsoft Internet Explorer"&&window.navigator.appVersion.substring(window.navigator.appVersion.indexOf("MSIE")+5,window.navigator.appVersion.indexOf("MSIE")+8)>=5.5) {
isie=1;
}
else {
isie=0;
}
if(isie){
var preloadit=new Image()
preloadit.src=imagepath
}
function pop() {
if(isie) {
x=x+dx;y=y+dy;
oPopup.show(x, y, imagewidth, imageheight);
if(x+imagewidth+5>screen.width) dx=-dx;
if(y+imageheight+5>screen.height) dy=-dy;
if(x<0) dx=-dx;
if(y<0) dy=-dy;
startani=setTimeout("pop();",50);
}
}
function dismisspopup(){
clearTimeout(startani)
oPopup.hide()
}
function dowhat(){
if (imageclick=="dismiss")
dismisspopup()
else
window.open(imageclick);
}
if(isie) {
var x=0,y=0,dx=speed,dy=speed;
var oPopup = window.createPopup();
var oPopupBody = oPopup.document.body;
oPopupBody.style.cursor="hand"
oPopupBody.innerHTML = '<IMG SRC="'+preloadit.src+'">';
oPopup.document.body.onmouseover=new Function("clearTimeout(startani)")
oPopup.document.body.onmouseout=pop
oPopup.document.body.onclick=dowhat
pop();
if (hideafter>0)
setTimeout("dismisspopup()",hideafter*1000)
}
-->
</script>
Pages: 7/10 First page Previous page 2 3 4 5 6 7 8 9 10 Next page Final page [ View by Articles | List ]