1 报表缓存 当某个客户端访问某个报表,引擎将其计算出来后,会将运算结果缓存下来,之后如果再有别的客户端用相同的参数访问同一个报表,引擎会将缓存下来的报表结果直接返回给该客户端,而不会重新计算报表。
这种缓存方式在大用户并发的情况下可以大大的提高性能,缓解服务器的计算压力。同时,当同一个客户端访问完该报表后,如果需要对同一报表结果进行别的操作,例如打印、导出、翻页等,引擎也直接从缓存里取报表结果,而不必重新计算。
缓存报表的存储有两种方式:一、直接存到硬盘上 二、同时存到内存和硬盘,在内存中处于软引用状态。当内存够用时一直在内存中保持着,引擎需要的时候直接从内存中取,交互速度快,当内存不够时缓存被当成垃圾回收,引擎需要的时候从硬盘上读取。
皕杰报表还支持缓存组,即根据缓存的缓存时间不同,将报表分组缓存。
缓存组的设置方法:点击报表根格,选中报表,在右侧属性的缓存组属性中设置缓存组名称,该名称要与配置文件中
如果报表没有设置缓存组,则执行默认缓存时间。
2 并发控制 当报表引擎已经没有优化余地时,如果服务器资源依旧吃紧,可以控制应用服务器的并发数。不同的应用服务器,其并发数的控制机理会略有区别,具体的配置方法请参见服务器厂商提供的文档。
3 JVM内存 JVM堆栈内存是决定应用服务器性能的关键指标,由于JAVA的自动垃圾回收机制以及其屏蔽了指针的应用,导致了JAVA程序占用的内存总是比C语言程序占用的内存大,因此JAVA程序最常见的性能问题就是内存溢出, 当内存不够时,可以加大JVM堆栈内存,最大可以加到2G(32位的JVM)
4 按需取数 当报表数据量很大,结果报表格子数也很多的时候,如果报表的运算并不复杂,没有跨行组的运算,可以采用按页取数的办法,该办法可以从根本上缓解大报表的内存压力。
该办法的原理是:每次只取出一页数据进行报表运算,当翻页时取下一页数据进行运算,这样每次内存中只保留一页的数据,大大加快了运算速度,减轻了内存压力。
用户根据数据量的大小可以创建不同的报表类型,当数据量较少,可直接用“普通报表”,若数据量过大,有可能影响运行速度的话,可使用“行式报表”。
5 流式导出 “行式报表”解决了报表在浏览器上展示时的性能问题,但是当“行式报表”导出excel时,依然会遇到性能问题,可以采用把导出格式配置诚xlsx格式的方式来解决这个问题。
该方式的原理是:无论报表是否是“行式报表”,xls格式导出都是采用Java对象方式来操作Excel文件。而导出为xlsx格式则是根据报表类型不同而采用不同的技术手段,当报表为“行式报表”时,采用数据流的方式来操作Excel文件,否则采用Java对象的方式。
采用Java对象方式操作Excel文件,快,但是耗用内存多;采用数据流方式操作Excel文件,慢,但是耗用内存少。