JSFiddle - React, Tailwind, and code Playground
by vasagi
HTML
<script src="https://code.highcharts.com/stock/highstock.js"></script>
<script src="https://code.highcharts.com/modules/boost.js"></script>
<script src="https://code.highcharts.com/modules/exporting.js"></script>
<div id="container"></div>
JavaScript
const n = 120,
s = 600,
pointStart = Date.UTC(2017, 0, 1),
pointInterval = 24 * 36e5;
function getData(n) {
const arr = [];
let a,
b,
c,
spike;
for (let i = 0; i < n; i = i + 1) {
if (i % 100 === 0) {
a = 2 * Math.random();
}
if (i % 1000 === 0) {
b = 2 * Math.random();
}
if (i % 10000 === 0) {
c = 2 * Math.random();
}
if (i % 50000 === 0) {
spike = 0;
} else {
spike = 0;
}
arr.push([
pointStart + i * pointInterval,
2 * Math.sin(i / 100) + a + b + c + spike + Math.random()
]);
}
return arr;
}
function getSeries(n, s) {
const r = [];
r.push({
data: getData(n),
lineWidth: 4,
boostThreshold: 1,
showInNavigator: true,
"zoneAxis": "x",
zones: [{
"value": new Date('2017-02-20').getTime(),
"color":'red'
},
{
"value": new Date('2017-02-22').getTime(),
"color":'green'
}]
});
return r;
}
const series = getSeries(n, s);
console.time('line');
Highcharts.stockChart('container', {
chart: {
zooming: {
type: 'x'
}
},
boost: {
useGPUTranslations: true,
// Chart-level boost when there are more than 5 series in the chart
boostThreshold: 5
},
title: {
text:
'Highcharts drawing ' + (n * s) + ' points across ' + s + ' series'
},
navigator: {
xAxis: {
ordinal: false,
min: pointStart,
max: pointStart + n * pointInterval
},
yAxis: {
min: 0,
max: 10
},
series: {
color: null // Inherit from base
}
},
scrollbar: {
liveRedraw: false
},
legend: {
...