1. 概述
随着越来越多的用户,对报表样式需求日益增多,折叠树由于样式美观,使用也越发增加。
因而也造成了很多性能上的使用卡顿,本文档从排查步骤、推荐功能的角度,对折叠树的性能优化进行总结整理。
2. 排查整体导图
注:每个情况对应的方案介绍请参见本文第三章、第四章。
3. 插件优化-折叠树(数据量大)
3.1 新计算引擎插件
包含对折叠树性能的优化,主要分为异步取数及非异步取数。针对大数据量的折叠树控件,优化效果好,尤其异步取数。因此,若用户有万级以上的折叠树展示需要,可优先使用新引擎下的异步取数折叠树。
3.1.1 原理
1)异步取数折叠树
主要针对结构比较标准的单棵纵向折叠树,通过异步取数+异步加载,从取数阶段就进行折叠树性能的优化。
场景限制(只支持同时满足以下条件的场景):
单数据集
折叠树按钮纵向排布
数据列公式仅支持sum()汇总和行内计算
单棵折叠树
折叠树按钮所在行的数据列左父格需设置为折叠树按钮所在单元格
去掉多余的空白行列,因为占位的空白行列仍然要满足第 5 条规定,一般来说为了保证能正常使用,尽量不要留空白行列。
2)非异步取数折叠树
主要优化前台数据加载的性能问题,实现前台异步加载,优化折叠树的前端性能。
支持场景:
折叠树纵向扩展
单棵折叠树
此类非异步主要适用于:不满足异步取数的折叠树场景,仅在前端展现上进行优化。
3.1.2 设置方法
请参见:模板计算属性
4. 模板设置排查
可以检查模板设置,出现不少由于模板本身设置复杂,格间运算,条件属性等导致的性能问题。
4.1 模板公式计算复杂
场景 | 建议 |
---|---|
模板公式设置较多导致卡顿 | 减少公式计算,优化 sql |
格子间的过滤和计算过多 | 数据集优化整合,减少不必要的前台计算 减少模板里的计算 优化服务器性能 |
模板参数格子过滤实现折叠树 | 改成树数据集的方式 这种根据控件值进行过滤的效果,不要用过滤条件,改成sql的形式 |
总结:使用折叠树的模板,不在单元格做过多的过滤及公式计算,尽量都在数据集 sql 中进行提前计算。
4.2 折叠树单元格形态设置复杂
场景 | 建议 |
---|---|
单元格使用控件及数据字典导致 | 折叠树本身已经是控件加载,对单元格不需要再次设置数据字典,直接拖数据集字段即可 |
单元格设置了形态(显示值和实际值不一致) | 删除单元格形态设置,保持实际值和显示值一致 |
总结:折叠树按钮所在单元格,尽量实际值和显示值保持一致,分开设置会大大影响性能。
4.3 条件属性
场景 | 建议 |
---|---|
大量的计算公式和条件属性 | 删除重复的条件属性,装了性能优化插件,在数据量较少的情况下有较大优化 另外将数据过滤写到参数查询中,减少计算公式 |
使用条件属性设置的折叠树 | 条件属性做折叠树会传递动态参数,每次传参都会触发一次模板计算,都会重新取数; 数据多的话,比较耗时,建议用树节点按钮 |
总结:模板条件属性过多,或者是不使用树节点按钮,使用条件属性实现,都会造成折叠树性能下降,因此对待模板设置,使用树节点按钮+树数据集,另外去除不必要的条件属性设置。
4.4 js事件
场景 | 建议 |
---|---|
JS一键展开折叠树 | 主节点数据多,js会循环执行 建议直接展示明细表或者用数据钻取实现查询批次明细的效果 |
总结:用户若无一键展开需求,不推荐使用;若使用,在数据量较大时,会对折叠树性能有一定影响。