【发布时间】:2016-04-14 03:17:03
【问题描述】:
我正在构建的网站中有一个奇怪的问题。在有问题的页面上,我使用了一些 highcharts。一切正常,但渲染时间太长(大约 5 秒)。
当我在 chrome 中检查它时,我看到如下内容:
highcharts 的 8 个脚本在红色框中。很明显,问题就在那里。
为了渲染 highcharts (javascript) 的脚本,我创建了一个控制器和视图。我是这样在模板中使用它们的:
{{ Html::script(url ('/highchart/gauge', [$humidityInside->sd_value , 'humidityInside', 'Luchtvochtigheid binnen','%',0,100,'#55BF3B','#DDDF0D','#DF5353'])) }}
在 highchart 控制器中,我只是将变量发送到视图:
public function gauge($value,$divname,$chartTitle,$suffix,$minValue,$maxValue,$colorMin,$colorMed,$colorMax)
{
return view('highchart.gauge')->with(compact('value' , 'divname','chartTitle','suffix','minValue','maxValue','colorMin','colorMed','colorMax'));
}
然后视图只呈现 javascript,将变量放在正确的位置:
$(function () {
var gaugeOptions = {
chart: {
type: 'solidgauge'
},
title: null,
pane: {
center: ['50%', '85%'],
size: '140%',
startAngle: -90,
endAngle: 90,
background: {
backgroundColor: (Highcharts.theme && Highcharts.theme.background2) || '#EEE',
innerRadius: '60%',
outerRadius: '100%',
shape: 'arc'
}
},
tooltip: {
enabled: false
},
// the value axis
yAxis: {
stops: [
[0.1, '{{ $colorMin }}'], // green
[0.8, '{{ $colorMed }}'], // yellow
[0.9, '{{ $colorMax }}'] // red
],
lineWidth: 0,
minorTickInterval: null,
tickPixelInterval: 400,
tickWidth: 0,
title: {
y: -70
},
labels: {
y: 16
}
},
plotOptions: {
solidgauge: {
dataLabels: {
y: 5,
borderWidth: 0,
useHTML: true
}
}
}
};
$('#{{$divname}}').highcharts(Highcharts.merge(gaugeOptions, {
yAxis: {
min: {{ $minValue }},
max: {{ $maxValue }},
title: {
text: '{{ $chartTitle }} '
}
},
credits: {
enabled: false
},
series: [{
name: '{{ $chartTitle }}',
data: [{{ $value}} ],
dataLabels: {
format: '<div style=\"text-align:center\"><span style=\"font-size:25px;color:' +
((Highcharts.theme && Highcharts.theme.contrastTextColor) || 'black') + '\">{y}</span><br/>' +
'<span style=\"font-size:12px;color:silver\">{{$suffix}}</span></div>'
},
tooltip: {
valueSuffix: ' {{$suffix}}'
}
}]
}));
});
正如您在图片中看到的,第一个脚本运行良好,但是由于某种原因,每个后续脚本的渲染时间都在增加。如果我只是为其中一个图表渲染脚本,它就可以正常工作。
知道是什么让我慢了下来吗?
【问题讨论】:
-
如果您尝试直接从浏览器打开脚本会发生什么?需要那么长时间吗?
-
另外,
{{ $value }}中究竟包含了多少数据?老实说,我不知道你为什么不只是使用 ajax 调用将数据加载到 js 中,而不是使用服务器生成 js 文件? -
您从哪里获取来自控制器的数据以将其传递给图表?
标签: javascript php jquery laravel highcharts