我正试图加快我的页面的速度。但是问题是我认为Highcharts js可能会使我的网站变慢。
我已经在标题中包含了Highchart的JS,因为我需要更早地执行脚本,以便可以加载highchart的地图。 但是我认为这个过程对我的Pagespeed的影响很大。
我被要求进行js的延迟解析,所以我要做的是我在script标签中添加了async属性,但是在添加async属性后,我的地图停止显示。
我的脚本标签是这样的。
<script async src="assets/js/jquery.min.js"></script>
<script async src="assets/js/script.min.js"></script>
<script async type="text/javascript" src="assets/js/jquery-3.3.1.js"></script>
<script async src="js/highcharts/highstocks.js"></script>
<script async src="js/highcharts/mapmodulesdata.js"></script>
<script async src="js/highcharts/mapmodulesexporting.js"></script>
<script async src="js/highcharts/map-export-data.js"></script>
<script async src="js/highcharts/map.js"></script>
<script async src="js/highcharts/worldmap.js"></script>
如果我错过了一些东西,请纠正我
答案 0 :(得分:1)
仅在将“ highcharts.js”加载到dom之后,才需要调用Highcharts API,您可以按照以下示例进行操作:
https://codepen.io/anon/pen/ydorpE?&editable=true
var script = document.getElementById("script1");
script.onload = function(){
afterLoad()
}
function afterLoad () {
Highcharts.chart('container', {
title: {
text: 'Solar Employment Growth by Sector, 2010-2016'
},
subtitle: {
text: 'Source: thesolarfoundation.com'
},
yAxis: {
title: {
text: 'Number of Employees'
}
},
legend: {
layout: 'vertical',
align: 'right',
verticalAlign: 'middle'
},
plotOptions: {
series: {
label: {
connectorAllowed: false
},
pointStart: 2010
}
},
series: [{
name: 'Installation',
data: [43934, 52503, 57177, 69658, 97031, 119931, 137133, 154175]
}, {
name: 'Manufacturing',
data: [24916, 24064, 29742, 29851, 32490, 30282, 38121, 40434]
}, {
name: 'Sales & Distribution',
data: [11744, 17722, 16005, 19771, 20185, 24377, 32147, 39387]
}, {
name: 'Project Development',
data: [null, null, 7988, 12169, 15112, 22452, 34400, 34227]
}, {
name: 'Other',
data: [12908, 5948, 8105, 11248, 8989, 11816, 18274, 18111]
}],
responsive: {
rules: [{
condition: {
maxWidth: 500
},
chartOptions: {
legend: {
layout: 'horizontal',
align: 'center',
verticalAlign: 'bottom'
}
}
}]
}
});
}
#container {
min-width: 310px;
max-width: 800px;
height: 400px;
margin: 0 auto
}
<script id='script1' async src="https://code.highcharts.com/highcharts.js"></script>
<script async src="https://code.highcharts.com/modules/series-label.js"></script>
<script async src="https://code.highcharts.com/modules/exporting.js"></script>
<script async src="https://code.highcharts.com/modules/export-data.js"></script>
<div id="container"></div>
答案 1 :(得分:0)
加载这些脚本然后调用Highcharts的正确方法应该是这样的:
<header>
<!-- remove all scripts from here -->
</header>
<body>
...
<script src="assets/js/jquery.min.js"></script>
<script src="assets/js/script.min.js"></script>
<script type="text/javascript" src="assets/js/jquery-3.3.1.js"></script>
<script src="js/highcharts/highstocks.js"></script>
<script src="js/highcharts/mapmodulesdata.js"></script>
<script src="js/highcharts/mapmodulesexporting.js"></script>
<script src="js/highcharts/map-export-data.js"></script>
<script src="js/highcharts/map.js"></script>
<script src="js/highcharts/worldmap.js"></script>
<script>
(function() {
// Now in this function you can add Highcharts call
})();
</script>
</body>
答案 2 :(得分:0)
所有脚本执行完毕后,您需要创建一个图表。 window.onload
还等待异步脚本,因此您可以使用它:
window.onload = function() {
Highcharts.mapChart('container', {...});
}
实时演示: https://jsfiddle.net/BlackLabel/j3tfveqa/
文档: https://developer.mozilla.org/en-US/docs/Web/API/GlobalEventHandlers/onload