【发布时间】:2023-03-08 22:02:01
【问题描述】:
我有一个仪表板,当用户登录时,它会显示在主屏幕上。
最初我有两个图形,一个是线条,一个是条形。问题是图形查询有点重,加载大约需要 30 秒。
我已经对查询进行了优化,并且改进了一点,问题是当我想访问系统的其他选项时并没有离开我,因为我必须等到加载图表。
用户很难等到图表加载完毕,我想知道是否有一种方法可以访问其他系统选项,而不管是否加载了图表。
我的代码如下:
/*
* You get the urls that the user has access to in the dashboard. This is executed * when the user is on the main screen.
*/
$.getJSON(getBaseUri() + 'dashboard/index', function(data) {
var datas = data['return'];
if(datas == ""){
$productivities.removeClass('chartID');
$productions.removeClass('chartID');
$combox.addClass('hidden');
}
for (var i in datas) {
receiveData({
div : datas[i].div,
title : datas[i].privilege,
sign : datas[i].sign,
iconClass : datas[i].class,
id : datas[i].id,
label : datas[i].label,
xaxis : datas[i].xaxis,
yaxis : datas[i].yaxis,
background: datas[i].background,
url : datas[i].route,
type : datas[i].type
});
}
});
/*
* The function receiveData () receives the parameters of the dashboard that the user has access and brings the data of each url consulted, and according to the type of graph the function is executed.
*/
function receiveData(param) {
$.ajax({
url: param.url,
method: 'GET',
dataType: 'json',
success: function(data){
var datas = data['return'];
if(param.type === "LineChart"){
lineChart({
data : datas,
div : param.div,
title: param.title,
url : param.url
});
$loaderProduction.addClass("hidden");
}
if (param.type === "BarChart") {
barCharts({
data : datas,
div : param.div,
title : param.title,
url : param.url,
label : param.label,
xaxis : param.xaxis,
yaxis : param.yaxis,
background: param.background
});
$loaderProductivity.addClass('hidden');
}
if (param.type === "Indicator") {
indicatorsChart({
data : datas,
div : param.div,
title : param.title,
icon : param.sign,
class : param.iconClass,
idDash: param.id
});
}
if (param.type === "Sowing") {
sowingIndicator({
data : datas,
div : param.div,
title : param.title,
idDash: param.id
});
}
},
error: function(error){
console.log(error);
}
});
}
基本上这些是我用来显示仪表板图的函数。
我认为这种情况我需要使用WebWorkers,但我不知道如何使用它
【问题讨论】:
-
这张图表有多少个数据点?
-
每张图有两张图,每张图有52个点@jonmrich
-
charts.js 应该以毫秒为单位执行。我猜您的数据返回到 AJAX 的速度非常缓慢。你能检查一下吗?
-
我知道查询有点繁重,在这个问题中我寻求帮助以改进其中一个查询 (stackoverflow.com/questions/42069953/change-query-sql) @jonmrich
-
基于该查询,我不认为charts.js 是远程问题。您可能只需要添加一个加载图标,该图标会在数据准备好时消失。这至少会告诉用户有什么事情要发生了。
标签: javascript jquery ajax performance