datart icon indicating copy to clipboard operation
datart copied to clipboard

仪表盘的查询和重置控制器功能优化

Open ziveen opened this issue 1 year ago • 3 comments

问题描述

现在,仪表盘的查询和重置控制器的功能是全量的查询图表的数据,无论图表是否出现在可视区域,这在仪表盘中图表量少时没问题,一旦遇到复杂的图表并并且数量多时,很容易导致查询超时。实际场景中,这种情况还是会出现。

期望

所以,如果查询和重置也能实现在可视区域的图表才执行execute,这样遇到复杂的仪表盘能极大的节约性能。

想法建议

但是,查询的时候如何判断图表在可视区域呢?我有个想法是:查询或者重置时,将所有的图表的rerender字段全部置为false,再利用useRenderWidget这个hook的懒加载功能实现。

现有仪表盘的查询逻辑
image

ziveen avatar Mar 01 '24 02:03 ziveen

将仪表盘所有的图表的rerender置为false太粗暴了,也会造成不必要的查询(没有关联控制器的图表)。可以将控制器关联的图表的rerender置为false。

ziveen avatar Mar 01 '24 02:03 ziveen

上述方案,还存在另外一个问题。如果表格执行了分页查询,例如查询第二页,当点查询控制器时,此时页码不会重置为1,这样pageInfo的pageNo: 2,会有问题

ziveen avatar Mar 01 '24 02:03 ziveen

可以按下面的方法优化:

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,
          }),
        );
      }
    });

ziveen avatar May 21 '24 09:05 ziveen