2007-10-09

EXT性能问题

       用了两个多月EXT,最近遭遇性能瓶颈,不得不放弃了,或许是我们用的有问题,所以请各位多多指教。

        用最简单的话说就是,我们要用grid一次显示1000条数据,不准用分页,不准修改EXT源代码,可以使用滚动条,显示时间不能超过2秒。

       加载大规模数据不用分页虽然听起来很愚蠢,但是那是用户的要求,因为他们认为Delphi可以做到,Web也可以做到。

      我们采用EXT+Struts+Spring+Hibernate,EXT解析Struts返回的XML串。

      我们的测试结果如下:(四台机器同时访问,机器配置均为P4 3.0,512Mb,有一台是1G,不过时间没有多大差别,每个测试重复三遍,取平均值)

       加载数据量     共耗时(秒)   直接调用Action返回XML耗时(秒)

         20                         2                                        <1

          200                      10                                      2

          700                      20                                      8

          1400                    40                                     17

 

          我在自己的笔记本上测试(Core2 2.0G,2G)

          800                    16

 

          假设总耗时=EXT解析XML时间+EXT绘制DOM元素显示数据时间+调用Action并返回XML时间

          在《Javascript权威指南》中指出IE6.0解析DOM会随数据量增大呈几何级增长。我觉得这个或许是性能瓶颈,而且我们无法克服。

      

           而且在加载大数据量时,IE会瞬时出现假死,而且一碰就会出现“无响应”,我想这对于要求实时性很高,数据量很大,稳定性很高的ERP系统而言,EXT并不能胜任。

           不知道各位有没有好的建议和解决方案。

        

 

         

评论
liluyang726 2008-05-14
tttttt 写道
对于EXT,我不明白,为什么你们一定要用它的Grid,我说句实话,那个Grid做得太烂!

看来各位也都是一群.net控件蜜罐里长大的吧,已习惯于使用别人的控件了。

整个EXT,能吸引我的地方就是他的WINDOW、DESKTOP、SKIN、THEMES。

别的,自己做。


真是肤浅呢。。。。还有你有时间写这个,咋不吧时间放在程序实现上呢。
znjq 2007-12-27
大数据量要用特殊的方法,不要妄想一个页面显示,dom树是有极限的。
5列,几千行数据,2-3秒显示是可以做到的
haoming.sun 2007-12-27
用分行下载
leehus 2007-12-27
数据分步取回:
先load前100条数据,显示出来,
然后:再取100条,update ds(ds.add(records[])),循环加完所有数据。
取完全部数据后执行一个检测函数:把当前grid中最大的id值传到后台检测是否有人加了新数据,true,取回,update ds

可以试试,我没测试过,看ext的docs觉得理论上可以实现
不过排序恐怕就没办法了
jjx 2007-12-26
直接拖到最后或最前,需要10几秒
Cabo 2007-12-26
fins 写道
fangzhouxing 写道
LiveGrid发表:
http://www.siteartwork.de/2007/11/10/livegrid-component-with-extjs/

不用分页直接显示后端大容量数据表。


例子在我这里出错.

其实我觉得,从ext grid的设计来看,他并不适合做 liveGrid 除非做较大改动.

liveGrid 做的比较不错的 是 rico 和 dorado
但是也各有缺点. 不过做的已经很不错了

而ext-grid要想达到或者超过上面两位, 底层需要大改动啊

我不知道siteartwork上的这个对ext的改动到了什么地步
如果只是简单的改一改 很有可能是 有了livegrid功能,但是ext的其他的功能都丢失了


liveGrid 的演示页面:
http://www.siteartwork.de/livegrid_demo/

它采用了重载的 Ext.ux.data.BufferedJsonReader,Ext.ux.grid.BufferedStore,Ext.ux.grid.BufferedGridView,Ext.ux.BufferedGridToolbar,Ext.ux.grid.BufferedRowSelectionModel 等组件,基本上已经脱离了原来的 Ext.grid, 所以效果有了很大的提升

给我的体验很不错。
也谢谢这个主题的讨论让我找到了 liveGrid 这么个优秀的 Ext User Extension.
fins 2007-11-12
fangzhouxing 写道
LiveGrid发表:
http://www.siteartwork.de/2007/11/10/livegrid-component-with-extjs/

不用分页直接显示后端大容量数据表。


例子在我这里出错.

其实我觉得,从ext grid的设计来看,他并不适合做 liveGrid 除非做较大改动.

liveGrid 做的比较不错的 是 rico 和 dorado
但是也各有缺点. 不过做的已经很不错了

而ext-grid要想达到或者超过上面两位, 底层需要大改动啊

我不知道siteartwork上的这个对ext的改动到了什么地步
如果只是简单的改一改 很有可能是 有了livegrid功能,但是ext的其他的功能都丢失了
fins 2007-11-12
tttttt 写道
wch3116 写道
引用
对于EXT,我不明白,为什么你们一定要用它的Grid,我说句实话,那个Grid做得太烂!


先说烂在哪里?


例如排序,没有提供多个排序,以及排序队列管理。

no contextmenu

不能Autofit

no zebra

当grid置于自动换行模式,title文字没有“…”



我觉得你对ext的评价有点"想当然", 你完全是站在使用者角度,而非技术人员的角度.

从使用者角度来看,当然是越完美越好,而ext-grid离完美当然还有很大距离.
但是 如果你稍微有点技术背景(也许你有,只是你没有站在技术的角度去看ext)
那么你就不会说ext"太烂"了.你具的那几个例子可能确实是ext的不足
但是这些不足 还不足以让你用"太烂"来形容, 除非你能做出比它更好的来,或者找到一个更好的利用ajax技术实现的列表组件.

其实我也在不停的去寻找ext-grid的漏洞,并且想办法做出一个更好的来.但是,我始终的认为,ext-grid已经是我见过的最好的ajax列表组件了.

关于 title文字没有“…”的问题: 在IE下是有的,原因是IE和FF对text-over的解释方式不同.
如果在FF下也要叫上..., 那速度将会慢的无法接受(因为要用js挨个单元格去判断内容长度,然后再截取字符串,再拼接上...)
sslaowan 2007-11-11

[quote="fangzhouxing"]LiveGrid发表: [url]http://www.siteartwork.de/2007/11/10/livegrid-component-with-extjs/[/url] 不用分页直接显示后端大容量数据表。[/quote]

 

我看那个例子怎么没有数据加载啊

fangzhouxing 2007-11-11
LiveGrid发表:
http://www.siteartwork.de/2007/11/10/livegrid-component-with-extjs/

不用分页直接显示后端大容量数据表。
halfmile 2007-11-08
很想知道你的客户的目标用户是哪个星球的,用多大的显示器。。。。

在我看来这个不是ext性能问题,而是浏览器性能问题。你可以试试用最快的 document.write 方法写1。5w个span标签,需要多少时间。

Ext 已经包含了一个非常好用的 Ext.PagingToolbar, 你可以直接用这个作分页。

fight_bird 写道
又是web端html大数据量的解析性能问题,客户需求和我遇到的几乎一样,只不过我遇到远比你这个极端,客户要求1.5W条数据一次加载,页面加载一次的时间为恐怖的5分钟,全选所有行的时间为恐怖的3分钟,firefox也是一样,这是html解析大数量时的性能瓶颈,在目前浏览器下使用纯DHTML的方式是无法解决的,AJAX只是掩饰问题,用户一次将滚动条拖到底的效果仍然无法接受,使用ie的xml+xsl方式倒是可以解决大table标签的显示性能问题(已实现),但xsl动态互动效果实在难实现,页面头部声明如下:
<?xml version="1.0"?>
<?xml-stylesheet type='text/xsl' href='DataGridShow.xsl'?>


建议用appllet实现,用js+applet实现页面交互,应该可以解决性能问题,至于applet在IE下的两个主要缺点:插件过大、安全控制下的禁止加载,前者在局域网内不成问题,后者使用Sun提供的带applet的jsp的代码修饰工具可以实现客户端浏览提示的效果,客户端会出现确认安装Java插件的安全提示,这个问题也就不成问题了。
sp42 2007-11-08
企业级Ajax框架

在众多的AJAX框架中,考察一个框架是否优秀,除了强调框架的功能、性能外,掌握难度和相关的文档、范例也是参考要数。开源框架Ext便是这样一个不错的选择。Ext针对一个典型的RIA标准,离不开在浏览器上运行的相应解决方案,以下是我个人对EXT的效率分析:

· 良好的用户体验, 响应速度快 运行时快速高效

Ext参考合理的设计模式(例如,Elements使用Composite/Flyweight享元模式、许多组件如Grid的设计灵感来自Swing),对于大量使用浏览器控件的应用场合,JavaScript引擎亦不会胸襟见爪。

· 基于互联网的开放标准进行数据传输

Ext以W3C的XHTML+CSS作为MakeUp语言,可解析Array,JSON和XML的数据源

· 丰富的组件,基于事件驱动,能进行快速开发

Ext的设计初衷就是,尽可能完善UI组件库而不需要其他库的帮忙;所有的UI组件都属于基于观察者(Observer)模式的事件驱动型设计。Ext对页面的要求本身就是Unobtrusive的,有利于做到HTML脚本之间的分离

· 良好的兼容性,能在多种平台下运行

兼容四大浏览器;服务端方面,Ext是一种与服务器无关的语言,使得其它特定语言的库亦可用于Ext处理Ajax服务。只要能返回EXT能处理的数据,任何一种类型的服务端是无要求的

2.0的待补充...
yangxuesong 2007-11-08
可不可以和我说下,怎么把ext form提交到struts的action。
好像有个{success:true}要怎么写呢??
taelons 2007-11-02
建议使用json格式代替xml
wch3116 2007-11-02
tttttt 写道


例如排序,没有提供多个排序,以及排序队列管理。

no contextmenu

不能Autofit

no zebra

当grid置于自动换行模式,title文字没有“…”



排序问题,我觉得web应用的排序通常情况下在服务端完成,因为返回客户端的一般是某一页数据,当前页内的排序意义通常不大,除非数据量小,能一次性全部下载到客户端。Ext Grid 有 sortchange 事件,你可以侦听这个事件重新请求服务端进行排序操作。
此外,Ext Grid 同样提供了 contextmenu rowcontextmenu 之类的事件接口帮助你实现 contextmenu。
关于 autofit, zebra ,你有好设计思路吗,可否分享?

任何一个产品都存在不足之处或者不同的取向选择,在我看来,上面这些问题即使存在也都不能构成“太烂”的罪名,呵呵
tttttt 2007-11-02
wch3116 写道
引用
对于EXT,我不明白,为什么你们一定要用它的Grid,我说句实话,那个Grid做得太烂!


先说烂在哪里?


例如排序,没有提供多个排序,以及排序队列管理。

no contextmenu

不能Autofit

no zebra

当grid置于自动换行模式,title文字没有“…”
znjq 2007-11-01
refresh 函数中的renderBody, 以及layout都是耗时的操作
layout中要调整每列的宽度等等.

不仅仅创建dom需要很大开销,设置style同样慢

同样lock,移动列都是同样的道理,不仅仅是初始化.
woods_zh 2007-11-01
如果ext 可以用数据导的方式就好了,这样用可以结合ajax 异步显示数据了,
sp42 2007-11-01
tttttt 写道
对于EXT,我不明白,为什么你们一定要用它的Grid,我说句实话,那个Grid做得太烂!

看来各位也都是一群.net控件蜜罐里长大的吧,已习惯于使用别人的控件了。

整个EXT,能吸引我的地方就是他的WINDOW、DESKTOP、SKIN、THEMES。

别的,自己做。

太肤浅了 看来阁下对EXT的理解就是一组widgets的堆砌。。。。我抗议!
wch3116 2007-11-01
引用
对于EXT,我不明白,为什么你们一定要用它的Grid,我说句实话,那个Grid做得太烂!


先说烂在哪里?
发表评论

提醒: 该博客已发表在公共论坛,博客所有留言会成为论坛回贴,留言请注意遵守论坛发贴规则

您还没有登录,请登录后发表评论

sslaowan
搜索本博客
最近加入圈子
存档
最新评论