datart
datart copied to clipboard
仪表盘的查询和重置控制器功能优化
问题描述
现在,仪表盘的查询和重置控制器的功能是全量的查询图表的数据,无论图表是否出现在可视区域,这在仪表盘中图表量少时没问题,一旦遇到复杂的图表并并且数量多时,很容易导致查询超时。实际场景中,这种情况还是会出现。
期望
所以,如果查询和重置也能实现在可视区域的图表才执行execute,这样遇到复杂的仪表盘能极大的节约性能。
想法建议
但是,查询的时候如何判断图表在可视区域呢?我有个想法是:查询或者重置时,将所有的图表的rerender字段全部置为false,再利用useRenderWidget这个hook的懒加载功能实现。
现有仪表盘的查询逻辑
将仪表盘所有的图表的rerender置为false太粗暴了,也会造成不必要的查询(没有关联控制器的图表)。可以将控制器关联的图表的rerender置为false。
上述方案,还存在另外一个问题。如果表格执行了分页查询,例如查询第二页,当点查询控制器时,此时页码不会重置为1,这样pageInfo的pageNo: 2,会有问题
可以按下面的方法优化:
const __widgetIds = Object.values(widgetMap).reduce((acc, cur) => {
if (cur.config.type === 'chart') {
acc.push(cur.id);
}
return acc;
}, [] as string[]);
Object.values(widgetMap).forEach(it => {
if (it.config.type === 'chart') {
dispatch(
boardActions.changePageInfo({
boardId,
widgetId: it.id,
pageInfo,
}),
);
}
});