你好,我们公司的项目跟你的架构非常类似,底层用hibernate,表示层用extra,只不过中间没有用ejb,我们用extra也有一段时间了,当初选用extra也是因为它可以提供像动态表格这样的的一些组件功能.在性能方面我也有跟你类似的遭遇,有些地方我认为是可以优化的,下面是我们用extra的时候的一些做法,写出来跟您交流(extra3.7.1):
extra有两种获取数据的方式,一种是直接sql的方式,一种是datagetter方式,我们感觉直接sql的方式性能比较好,但是不适合用在复杂变化查询条件方式(我们公司的大部分页面查询都非常复杂),因此,我们的大部分查询逻辑都是这样做的:datagetter先调用Service类,,然后Service再调用DAO,我们的service可能有点像你们用的ejb层,包含了事务处理的逻辑和业务逻辑。
extra的表示层功能跨越了client端和server端,因此要优化性能需要在以下几个方面努力:
1、client端显示性能的优化
2、client端到server端数据传输性能的优化
3、server端获取数据生成返回结果性能的优化
先说第一条,client端显示性能的优化,extra本身是一种rich web client架构,页面有好多script生成的对象,script是解释执行的,所以肯定会比静态页面慢不少,所以优化的重点就是script.
1、优化dataset,没有用的字段最好删掉.
2、减少dataset滚动时候或记录级别的事件,如果一定要用,建议用disablecontrol和enablecontrol
3、下拉框之类的dataset建议用sql方式,并允许缓存(但是如果下拉筐是动态变化的,则不能缓存)
再说Server端的优化:
1、使用datagetter的分页查询功能,结合hibernate的分页查询功能,这点可以大大提高性能(我们的做法是写了一个PagingDataGetter类继承了extra的DataGetter)
2、对于性能要求很高的,避免使用DataObjectUtil,手工完成Bean到dataset的转换
3、给datagetter的bean尽量使用扁平结构的valueObject,不要使用多层结构的Bean(就是Bean中的某些属性还是一个Bean).
4、在后台使用一些缓存机制(这点跟extra无关,但在并发访问量上升的时候是关键因素)
最后是网络传输的优化:
网络传输方面我们没做过什么优化.