Tag Archives: ExtJS

ExtJS的效率问题

由于ExtJS的GridPanel在分页状态下只能对当前页面按列排序,为了方便排序一时偷懒就把PagingToolbar给去掉了 压力测试时,发现当GridPanel包含1000条纪录时,整个界面的反应速度都非常慢,有时延迟甚至达到17秒。 开始以为是因为数据传输过大导致的延迟,之后又发现即使只是打开没有任何传输的界面仍然会有很长时间的延迟,已经可以确认是页面的问题了。 其实想想也是,ExtJS只是通过js动态的把HTML的tag依次加入到原有的DOM树中,当有1000条纪录的GridPanel存在时,可以想见当前浏览器中要处理的DOM树何其的庞大,效率瓶颈是必然的,何况处理如此庞大数据的还是js这种脚本弱语言。只不过一般情况下,ExtJS类似桌面程序的样子容易让我们想当然的认为效率不是问题。 可惜的是这段代码是基于ActiveX技术的实现,否则倒是可以测试一下三大浏览器在js处理问题上分个高下:) P.S. 理论上,同样的硬件同样的1000条纪录在服务器端生成同样的HTML返回,应该会比在客户端js根据数据解析后生成效率要高。

Posted in ExtJS, 软件技术 | Tagged , , | Leave a comment

ExtJs的Ajax乱码问题

最近用ExtJS+Ashx开了一个小的开源项目JeebookStore. 之前一直用的英文做的测试都也没感觉有啥问题,上周末一上中文,乱码问题就骚扰了我一个周末。 最开始是FormPanel发送的数据到ashx的时候出现乱码,Google了一下这样的问题还挺多,把所有js和html转存为UTF-8,然后把调用js的html设置为UTF-8编码,当然Asp的Request和Response保持默认的UTF-8,Firefox上就没有乱码的问题了。 再试IE,发现FormPanel内的数据已经没有问题,但通过URL参数传递的中文还是不对。依次尝试使用escape,encodeURI,encodeURIComponent函数对URL进行编码,没有效果。 多次试验下发现如果使用Form.submit函数的params属性来传递参数,并且method为GET时,IE下的表现就是正常的。如: URL: ashx/AddFile.ashx?name=中国&path=/中国 Form.submit({     url : ‘ashx/AddFile.ashx’,     method : ‘GET’,     params : {         name : ‘中国’,         path : ‘/中国’;     } }) 检查Action.Submit类的代码,发现ExtJS会在submit时使用params来拼接成如上的URL,之所以没有出现乱码,是因为分别对每个值进行了编码,而编码用的函数正是encodeURIComponent,只不过不像我之前那样直接对整个URL调用而已。 这番折腾又应了那句话,不合常理的问题往往是函数调用的问题。 总算IE和Firefox都可以正确处理中文了,可事情还没完,下载文件的文件名在FireFox变乱码了,当然还不算太乱,只不过是%E7%E9之类的显示而已。 检查发现我在返回文件名时,使用Server.UrlEncode对文件名做了UTF-8的编码,如果直接返回文件名则FireFox正常了,但IE同时变乱码,这次是彻底的乱码。貌似是因为FireFox对文件名的解析采用了ISOxxxx-1的编码而不是Http头中记录的编码类型。Google+研究了半天貌似没有好的解决办法,只好在ashx中做了浏览器的分支,即: HttpBrowserCapabilities bc = HttpContext.Current.Request.Browser; if … Continue reading

Posted in 我爱开源 | Tagged , , , | 3 Comments