性能优化:分页标签对比(extHtml与aotuBig)
问题背景:
今日由于一个项目的测试需求,需要对客户提出的分页标签的性能进行内部测试,此文就是对此次测试过程的感受记录下来,方便后续售前再遇到类似问题时,给予参考。
言归正传,下面直接说明一下润乾目前提供的分页标签有两种标签:extHtml和aotuBig标签。
extHtml标签是润乾针对大数据量报表分页显示给出的第一个官方解决方案,之前在相关安装手册的性能优化部分也有介绍,此处不再赘述,但是在后续不断地客户使用反馈来看,至少有两点瓶颈,一是目前此种方式支持的数据库类型有限,二是性能上虽然有很大提升,但是还是不能满足日益增长的客户需求。至此,润乾又推出了一个新分页标签:aotuBig标签。此分页标签功能覆盖之前的extHtml标签功能,并且使用配置更简洁、方便。内测时性能效果也更好,另外不需要在jsp页面中写大量的代码。
基于上面的情况,下面会以实际代码为例具体对比一下这两个标签的具体使用配置的不同。
解决方案:
使用分页标签与常规报表发布形式一致,需要一个raq模板和jsp页面引入runqianReport4.tld润乾标签库发布展现。
前期测试准备:
本地连接ORACLE数据库,建立TEST_TWO表,内置70W基础数据。以下测试均基于此进行测试。
标签extHtml标签发布:
1、 建立extHtml使用的raq报表模板,截图如下:
在报表中增加startRow和endRow参数,并在数据集中->参数中添加参数,下图:
2、 建立发布extHtml使用的jsp文件,截图如下:
注意上面划红线的地方,是使用extHtml标签必不可少的属性配置。可以看到在jsp页面中还嵌入了JAVA代码,用以计算数据总条数,方面后续的计算分页处理使用。
注意事项:
以上两种标签的测试基于使用缓存,即将reportConfig.xml文件中alwaysReloadDefine为no,启用缓存。此项设置的目的是使得设置的缓存页数cachePageNum生效。
标签aotuBig标签发布:
1、建立aotuBig使用的raq报表模板,截图如下:
此报表中不需要增加startRow和endRow参数,也不需要在数据集中->参数中添加参数,下图:
2、 建立发布aotuBig使用的jsp文件,截图如下:
注意上面划红线的地方,aotuBig标签有自己新增的属性。并且整个jap页面非常简洁,无需任何辅助JAVA代码,与发布一个普通报表除属性外无任何区别,也可以正常的设置导出、打印等操作。
备注:aotuBig标签的使用说明可参考之前李松波撰写的《分页计算标签autoBig使用介绍》文档。见附录。
注意事项:
以上两种标签的测试基于使用缓存,即将reportConfig.xml文件中alwaysReloadDefine为no,启用缓存。此项设置的目的是使得设置的缓存页数cachePageNum生效。
总结:
通过实际发布测试的情况,在同一笔记本环境配置下,使用extHtml标签直接展现TEST_TWO表70W数据,会报内存溢出。但是使用aotuBig标签直接展现相同的TEST_TWO表70W数据,三秒内计算展现完毕,并且通过附录可知,aotuBig支持的DB类型也非常全面。
所以,以后再进行分页标签优化大数据量报表时,推荐优先使用aotuBig标签。
附录:
摘录《分页计算标签autoBig使用介绍》中标签属性说明:
autoBig与传统的extHtml标签的区别主要在于如下几个属性:
dbType=”oracle” //新增,数据库类型,取值可参考下表,未知写unknown
dsName=”ds1″ //新增,要分页的数据集名称,如果是报表中的第一个数据集,可不指定
totalCountExp=”" //总条数表达式,可不写,默认用数据集的SQL
pageCount=”10″ //每一页的记录数
cachePageNum=”5″ //缓存页数
……除startRowParamName和endRowParamName该标签中没有外,其余与extHtml相同
注意:由于autoBig中不再使用startRowParamName和endRowParamName,所以在报表中也不必再增加起始行参数名startRow和结束行参数名endRow。
autoBig比起extHtml的有点在于使得totalCountExp不再必需,可以自由使用数据集记录数,这将极大地减少用户在页面计算总记录条数的工作量。