對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倍。