帆软FineReport填报报表提交慢的问题,可能由多种因素导致。以下是一些可能的原因及相应的解决方案:
原因及解决方案
数据量过大
问题:填报预览页面默认不分页,当数据量较大时,所有数据和元素都在一个页面上展示,导致页面加载慢。
解决方案:
使用查询条件控制每次查询的数据量。
启用填报分页功能。
直接显示控件
问题:开启直接显示控件功能后,会明显增加浏览器的渲染压力,导致页面加载和提交速度变慢。
解决方案:
关闭直接显示控件功能。
尽量避免使用按钮控件、复选按钮控件、单元格按钮组控件等默认始终直接显示的控件。
取数函数性能差异
问题:页面使用了性能较差的取数函数(如sql()、ds1.select()),且数据量较大时,会造成页面加载和提交缓慢。
解决方案:
优化SQL语句的执行速度。
使用性能更好的value()函数。
使用抽数缓存优化取数速度。
控件联动和JS处理
问题:控件联动复杂或JS处理数据量大时,会导致页面卡顿和提交速度变慢。
解决方案:
优化被联动的内容,减少多余的联动设置。
如需使用取数函数,尽量使用value()函数。
使用抽数缓存优化取数速度。
如果是用JS给其他单元格赋值,且赋值的数据量较多,可以换用批量赋值接口。
数据校验和提交设置
问题:设置了较多或较复杂的校验公式,或提交时校验控件的“允许自定义值”设置,当数据量较大时,会导致校验和提交速度变慢。
解决方案:
简化或减少校验公式。
如果不需要在提交时校验控件的“允许自定义值”设置,可以在配置表中添加相应字段来回退该逻辑。
如果需要在提交时校验,可以考虑减少数据字典的数据量,或者将相关校验放在“填报属性”的“数据校验”设置中实现。
数据库和服务器性能
问题:数据库性能不佳或服务器资源不足时,会影响提交速度。
解决方案:
优化数据库性能,如增加索引、优化SQL语句等。
增加服务器内存和CPU资源。
如果数据库类型为MySql,可以通过在数据连接的URL后增加rewriteBatchedStatements=true参数来开启批量提交功能。
模板父子格设置不合理
问题:模板父子格设置不合理,可能导致数据以数组*数组形式提交,增加了提交的数据量和时间。
解决方案:
根据报错提示调整单元格的父子格关系。
不建议开启“允许填报笛卡尔积”功能。
全局参数使用SQL语句
问题:全局参数的公式使用了SQL语句,可能导致页面加载缓慢。
解决方案:
尽量避免在全局参数中使用SQL语句。
可以考虑使用其他方式获取需要的参数值,如直接取系统参数或改为使用服务器数据集再通过value()函数取结果。
其他建议
分批次提交:如果数据量非常大,可以考虑分批次提交数据,以减少每次提交的数据量。
监控和日志分析:利用FineReport的监控和日志分析功能,定位性能瓶颈和错误原因。
升级和更新:确保FineReport软件是最新版本,以利用最新的性能优化和功能改进。
综上所述,针对帆软FineReport填报报表提交慢的问题,可以从数据量控制、控件设置、取数函数优化、联动和JS处理、数据校验和提交设置、数据库和服务器性能、模板父子格设置以及全局参数使用等多个方面进行排查和优化。