super

DOJO.widget的性能问题

对DOJO基本上算是文盲,只是项目中需要一些特效页面,在网上找了找,感觉DOJO做的不错,就拿过来用了,不过感觉性能很不好,页面刷新明显迟钝

   我的页面上大概有10几个DOJO,刷一次页面仅仅因为DOJO的widget的初始化的问题就要5-6秒钟,读了一下DOJO的代码,只要的时间都花费在dojo.hostenv.makeWidgets这个方法中,本人的js水平比较低,基本上改不了DOJO的代码,不过在这个方法中却找到了一个稍微提高些性能的办法,这就是 djConfig.searchIds的使用。

dojo.hostenv.makeWidgets = function(){
 // you can put searchIds in djConfig and dojo.hostenv at the moment
 // we should probably eventually move to one or the other
 var sids = [];
 if(djConfig.searchIds && djConfig.searchIds.length > 0) {
  sids = sids.concat(djConfig.searchIds);
 }
 if(dojo.hostenv.searchIds && dojo.hostenv.searchIds.length > 0) {
  sids = sids.concat(dojo.hostenv.searchIds);
 }

 if((djConfig.parseWidgets)||(sids.length > 0)){
  if(dojo.evalObjPath("dojo.widget.Parse")){
   // we must do this on a delay to avoid:
   // http://www.shaftek.org/blog/archives/000212.html
   // IE is such a tremendous peice of shit.
    var parser = new dojo.xml.Parse();
    if(sids.length > 0){
     for(var x=0; x<sids.length; x++){
      var tmpNode = document.getElementById(sids[x]);
      if(!tmpNode){ continue; }
      var frag = parser.parseElement(tmpNode, null, true);
      dojo.widget.getParser().createComponents(frag);
     }
    }else if(djConfig.parseWidgets){
     var frag  = parser.parseElement(document.getElementsByTagName("body")[0] || document.body, null, true);
     dojo.widget.getParser().createComponents(frag);
    }
  }
 }
}

具体使用方法就是在自己的页面上把所有的dojo的widget都要定义ID,类似这样

<input id="queryStr_0" name="queryStr_0" dojoType="ComboBox" style="width:280px;" autocomplete="false" >


然后加上这样一段js
<script language=javascript>
 djConfig.searchIds=['queryStr_0','queryStr_1','queryStr_2'];
</script>
这里的'queryStr_0'之类的就是你的widget的ID,这样对于我的10几个widget的页面,速度基本上会快上1-2倍。


posted on 2006-12-12 17:46 王卫华 阅读(1411) 评论(1)  编辑  收藏

Feedback

# re: DOJO.widget的性能问题 2007-07-04 17:49 匿名

其实并不是迟钝,而是,当dojo第一次加载的时候在渲染它的信息,然后把一些数据缓存,当你再次访问的时候速度就会好一些  回复  更多评论   



只有注册用户登录后才能发表评论。


网站导航: