页面渲染是指报表在计算完成后,生成 html 页面时加上各种格式外观属性的过程。如果在报表中添加了大量的呈现效果(隔行异色、背景图、条件警戒色等)时,页面渲染的速度就会受到影响变慢,但往往这些呈现效果又是必须的,所以这个时候就得看报表的性能了。
这里对润乾、帆软和 smartbi 三款报表工具进行测试,业内还有永洪和亿信也宣称对复杂报表的支持较好,但经过基本模型测试就会发现这两款产品与前述三款差距还是比较明显(可参考后面的链接),就没必要再做更多评测了。
测试的用例在数据计算上都比较简单,因为主要考察渲染性能,只在样式上增加了上面说到的几个条件样式,具体的可以看下面的说明。
“销售订单明细表”,字段 48 个(对应到报表为 48 列),总数据量 8600 条。
报表数据集 SQL:
select * from 销售订单统计汇总 where 订单ID!=? order by 订单ID
为保证测试公平,增加参数使得每次计算数据不同,报表不走缓存。
结果报表式样:
这是润乾报表生成结果,其他两款产品都是同样效果。
条件格式
1、 隔行异色 2、 折扣,折扣大于0.15(即达到85折)标红(前景色) 3、 运货费,分十个区间判断,小于等于10标为绿色、>10&&<=20某色、>20&&<=30、>30&&<=40、 >40&&<=60、>60&&<=80、>80&&<=100、>100&&<=120、>120&&<=140、大于140标红。 4、 订单ID,根据“运货费”判断分十个区间,小于等于10标为绿色、>10&&<=20某色、>20&&<=30、 >30&&<=40、>40&&<=60、>60&&<=80、>80&&<=100、>100&&<=120、>120&&<=140、大于140标红。 且 >100&&<=120 字体加粗、>120&&<=140 字体加粗、大于140字体加粗
“无”表示没有设置条件格式的报表;“有”表示增加了条件格式后的报表;“无输出”指后台不输出对应时间;“总用时”提从访问报表到页面呈现出来;
以下结果均同浏览器,分别为总用时、后台报表计算、生成 html 及翻页的 5 次平均数据。
1、 smartbi 不支持不分页展现,所以无法测试到单页 8600 行 *48 列的规模。按其最大 2000 行强制分页测试:
无条件格式:从访问到首先呈现出来是 17s,计算 + 生成 html 在 3s 左右,翻页时间较长均在 17s 左右。
有条件格式:从访问到首先呈现出来是 30s,计算 + 生成 html 在 6s 左右,翻页时间较长,达到在 40s 以上。
2、帆软当不分页时,后台不再输出生成 html 的用时,标为“无输出”了。
从用例一的测试结果看,在常规的单页格数规模下,三款产品的页面渲染基本一样,且有无条件格式基本不受影响。不过可以看到帆软的报表计算太慢了,所以页面端表现出的感受是出表最慢。
单页格数增大到 500*48 规模时,在报表没有条件格式下,页面渲染用时也基本一致,都在 3s 左右。增加条件模式后,帆软和 smartbi 的总用时相比润乾都有较大增加,帆软是花在报表计算上了,页面渲染用时没什么变化。但对 smartbi 页面渲染能力已经有了较明显影响,对比无条件格式时增加了 50% 的时间。
再次增大到 8600*48 规模(因 smartbi 不支持超过 2000 行的分页,这个规模就不对比它了),此时帆软和润乾,不论总用时还是渲染能力差距更很明显了,大家参考润乾和帆软的测试数据一目了然,润乾均优于帆软。
再结合翻页来看,常规规模下,润乾和帆软几乎没什么耗时,翻页流畅,而 smartbi 会有个卡顿(每页都有 1s 左右的用时)。来到 500 * 48 的规模,有无条件格式对润乾依然没有影响,帆软对比自身无条件格式翻页增加 60% 时长,但 smartbi 的有些不理解,从数据看,每翻一页和总用时一样(猜测:smartbi 对于清单报表是使用数据库分页的机制,每次都要按分页行数取数、再计算、生成 html,然后页面加载,这也和翻页及总用时一致的数据看相符,但目前没得到官方支持的回复)。针对 smartbi 最大支持 2000 行强制分页,前面数据表格下面也单独做了测试,当按 2000 行 * 48 列分页时,增加完条件格式,时间翻了近一倍,并且翻页比呈现出首页的时间都长了。
小结一下:常规规模,润乾最优,smartbi 次之,帆软输在了报表计算上,总用时太久了。500 行 * 48 列规模下,润乾最优,帆软次之,smartbi 翻页太慢。特大规模下,依然润乾最优,帆软次之,smartbi 最差。用例一整体表现出润乾在性能优化上全面(模型好)也最好,帆软的计算模型不够好,500 行 * 48 列规模,增加条件格式后增加了不少计算时间。smartbi 只适合常规页规模的情况,大的就很难用了。
“产品销售情况表”,表数据如下
每一个订单所属一个货主地区,每个订单均有 60 种不同产品,每种产品有对应销售金额。
订单号有 847 个,交叉报表按行分组(地区、订单编号)、列分组(产品名称),规模为 847 行 * 62 列,均采用不分页方式展现。
报表数据集 SQL:
select * from 产品销售情况表 where d订单编号!=? order by 货主地区,订单编号
同样,增加参数使得每次计算数据不同,报表均设置不走缓存。
结果报表式样:
条件格式
根据条件判断,给三个地区(华北、东北、华东)各分配一套色系,华北红色系,东北蓝色、华东绿色,然后根据 10 类产品判断,给予色系内不同深浅颜色的前景色。
“无”表示没有设置条件格式的报表;“有”表示增加条件格式后的报表;“总用时”指访问报表到页面呈现完;“后台时间”指报表计算 + 生成 html 时间
以上结果均同浏览器,5 次平均用时。
对于交叉类的报表,润乾的表现依然是最好的(该报表只有一页数据,所以只是感觉上差的不太多), 另外帆软比 smartbi 表现要好,或许是针对这类报表,帆软的模型要优于 smartbi。
增加复杂条件格式后的数据表现与用例一一致,润乾依然是衰减最小,帆软衰减也很小,smartbi 的页面渲染导致的衰减明显要大得多,用时比润乾和帆软要多出好几倍。
总的来看,润乾不论运算还是渲染的性能均是最优。帆软和 smartbi 针对不同格式报表,不同的数据规模,有些性能差异,但整体看帆软要优于 smartbi 的,比较均衡,相对也更稳定。smartbi 在处理页面较大且有较多格式的报表时渲染性能较差。
报表工具对比选型系列用例——多源分片报表
报表工具对比选型系列用例——排名及跨行组统计