自定义悬停提示js优化

-----重新提问

目前这段js+html实现了需要的展示样式。但是遇到的一个问题,当数据集加载时间过长的时候,js里的map也会重新加载。导致悬停提示加载缓慢。鼠标移到对应点之后,js会重新加载一遍数据集。导致悬停提示出不来。大佬们有没有优化的空间。(图表悬停提示

悬停提示.zip

function(){

            var cla = this.category;

            if(cla=="1月"){

            var cl= this.category;

            }

            else {

            var cl=(cla.replace("月","")*1)+"月";

            }

              var sql = "map('"+cl+"','ds1',1,2)";

    var value = FR.remoteEvaluate(sql);

    var bl=this.value;

    var hb="map('"+cl+"','ds1',1,3)";

              var value2 = FR.remoteEvaluate(hb);

    if(value2<0)

    {return "<span style='color:#f6f6fa;font-size:12px;font-weight:bold'>"+cla+"<br>当期值为:"+"  "+"<span style='color:#FEB750;font-size:20px;font-weight:bold'>"+bl+"</span>"+"<br>与上月环比:"+"</span>"+

    "<span style='color:#d14d4d;font-size:9px;font-weight:bold'> ▼"+" "+(value2*100).toFixed(2)+"%"+"</span>";}

    if((value2*100).toFixed(2)>=0)

    {return "<span style='color:#f6f6fa;font-size:12px;font-weight:bold'>"+cla+"<br>当期值为:"+"  "+"<span style='color:#FEB750;font-size:20px;font-weight:bold'>"+bl+"</span>"+"<br>与上月环比:"+"</span>"+

    "<span style='color:#2fb823;font-size:9px;font-weight:bold'> ▲"+" "+(value2*100).toFixed(2)+"%"+"</span>";}

}

FineReport 谢广坤 发布于 2023-9-28 09:55 (编辑于 2023-10-9 10:49)
1min目标场景问卷 立即参与
回答问题
悬赏:3 F币 + 添加悬赏
提示:增加悬赏、完善问题、追问等操作,可使您的问题被置顶,并向所有关注者发送通知
共2回答
最佳回答
0
CD20160914Lv8专家互助
发布于2023-9-28 09:59

你上传的文件,ds1只有12行数据,不会慢,如果你的真实环境中数据很多,建议你尽量汇总吧,不然数据量多了,你用map它肯定慢

  • 谢广坤 谢广坤(提问者) 真实数据集就是12行。但是由于查询的明细表,数据集加载本身就很慢。js有能优化的吗大佬
    2023-09-28 10:29 
  • CD20160914 CD20160914 回复 谢广坤(提问者) 你说的明细是哪一个,我就看到你上传的文件,只有两个图表,而且提示很正常呀!
    2023-09-28 10:30 
  • CD20160914 CD20160914 回复 谢广坤(提问者) 还有如果想做图表的话,你的图表引用的数据,为什么不group by 汇总
    2023-09-28 10:30 
  • 谢广坤 谢广坤(提问者) 回复 CD20160914 是很正常。因为我内置数据集当然很快。真实数据是数据集加载30秒。js中用的map会重新加载数据集,导致显示不出来。
    2023-09-28 10:45 
  • CD20160914 CD20160914 回复 谢广坤(提问者) 那你要优化你的sql了,你在数据库看一下查询的sql大概要多长时间。一个查询12行数据的返回,你要30秒,这个考虑你的sql编写能力了。比如索引,有索引的走索引
    2023-09-28 10:47 
最佳回答
0
zyx5809Lv4见习互助
发布于2023-10-9 11:09

你自己也意识到了,在触发js时会重新加载数据集,那么在js中是否可以不用sql查询?

红框的部分应当是你在根据不同月份进行sql查数,这部分工作应当可以在数据集中新加一个计算列计算得出。

进而在模板中添加报表块,将数据集中的各字段在报表块中展示并隐藏。

最后重写红框部分,将原本sql查数的逻辑改为从报表块单元格中取数的逻辑。

我认为这样能避免在js中加载数据集的工作。

image.png

  • 3关注人数
  • 558浏览人数
  • 最后回答于:2023-10-9 11:09
    请选择关闭问题的原因
    确定 取消
    返回顶部