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: {
      ...