前言:
最近前段时间写的一段awc工作列表显示客制化代码遇到了性能问题,通过不断性能优化,几乎达到了和ootb速度相当,随着awc的普及,以后类似的性能优化应该比较常见。
问题:
awc前端开发使工作列表显示时候,同时显示项目集、项目、目标对象的相关属性方便工程师直接通过工作列表的显示内容判断出任务一些关键信息(前面也发过实现方法,可参见【第16期】AWC中工作列表显示定制开发),但工作列表任务比较多的时候就会出现速度很慢问题(虽然获取项目集及项目名称代码是异步的,不影响页面主体的显示,但是当工作任务数量比较多的时候,还是能感觉到,工作列表已经显示出来很久后,才显示出来项目集及项目名称),比如平时几秒工作列表就可以加载完毕,加入了修改后的awc代码后,工作列表显完毕后,还得等个几分钟后客制化的项目集及项目名称才会最终显示出来。
图1:工作列表客制化后的显示效果
分析:
如果用前端AWC代码或者后端SOA代码来获取任务的项目集(Prg0ProgramPlan)、项目(TC_Project)或者目标对象的相关属性,会比较耗时(因为每个任务都会在工作列表页面显示时候,执行一次遍历目标、获取项目集、获取项目,并获取对应属性逻辑代码),影响功能的速度(如awc中加载工作列表时候会因为加入了获取目标、项目集、项目相关属性的awc代码,而页面加载很慢),可以通过底层bmide中配置这些要获取属性的复合属性来提高速度。
解决:
配置复合属性以供前段代码使用:
bmide中对任务(EPMTask)配置对应的复合属性,如下:
图2:配置的所有复合属性
1.复合项目集属性
复合项目集名称
2.复合项目属性
3.复合目标对象属性
复合目标对象中IssueReportRevision属性
最终效果:
代码优化:
优化前代码片段:
优化后代码片段:
通过结合复合属性优化后,加入客制化代码的工作列表显示几乎和ootb工作列表显示感觉不到有时间差异。
总结:
在项目实施方案定制时候,应尽量结合系统本身一些配置特性,比如复合属性,比如系统查询(系统配置的更接近底层,效率方面会比应用层的API快,特别数据量大时候差距很大),该优化不仅限于工作列表的显示优化,在开发中代码逻辑获取任务对应的项目集、项目、目标对象属性等都可以通过bmide配置复合属性后,直接获取复合属性来性能优化,比如awc中任务详情显示项目集名称和项目名称的XRTXml渲染,也可以将渲染中逻辑获取属性部分去掉,直接改为获取任务的复合属性值来提高网页显示速度。
为您推荐