首页 前端知识 解决echarts 定时器 - 造成的浏览器堆内存溢出导致页面崩溃

解决echarts 定时器 - 造成的浏览器堆内存溢出导致页面崩溃

2024-02-01 12:02:20 前端知识 前端哥 406 315 我要收藏

     最近在写数据可视化,长期跑在大屏上,但是总会遇到浏览器崩溃的问题,最终发现是定时器刷新加载函数,重复创建echarts示例的原因,不清空会一直占内存,导致超出浏览器堆内存页面崩溃,下面是测试可以看到内存一直再增加。

​
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<style>
    div {
        width: 500px;
        height: 500px;
    }
</style>

<body>
    <div id="main">

    </div>
</body>
<script src="./src/js/ins/echarts.min.js"></script>
<script>
    function chart() {
        var chartDom = document.getElementById('main');
        myChart = echarts.init(chartDom);
        var option;

        option = {
            xAxis: {
                type: 'category',
                data: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun']
            },
            yAxis: {
                type: 'value'
            },
            series: [
                {
                    data: [150, 230, 224, 218, 135, 147, 260],
                    type: 'line'
                }
            ]
        };

        option && myChart.setOption(option);
    }

    setInterval(() => {
        chart()
    }, 1);

</script>

</html>

​

解决方法:echarts的销毁函数dispose()

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<style>
    div {
        width: 500px;
        height: 500px;
    }
</style>

<body>
    <div id="main">

    </div>
</body>
<script src="https://cdn.jsdelivr.net/npm/echarts@5.2.1/dist/echarts.min.js"></script>
<script>

    //我在这
    var myChart = null;
    function chart() {
        //我在这
        if (myChart) {
            myChart.dispose(); // 销毁之前的 ECharts 实例
        }
        var chartDom = document.getElementById('main');
        myChart = echarts.init(chartDom);


        var option;
        option = {
            xAxis: {
                type: 'category',
                data: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun']
            },
            yAxis: {
                type: 'value'
            },
            series: [
                {
                    data: [150, 230, 224, 218, 135, 147, 260],
                    type: 'line'
                }
            ]
        };

        option && myChart.setOption(option);
    }

    setInterval(() => {
        chart()
    }, 1);

</script>

</html>

 

转载请注明出处或者链接地址:https://www.qianduange.cn//article/1043.html
标签
评论
发布的文章

Ajax用法总结

2024-02-14 09:02:07

JQuery之jsTree树形插件

2024-02-14 09:02:01

Why React Doesn‘t Need jQuery?

2024-02-14 09:02:00

jQuery模板字符串

2024-02-14 09:02:58

大家推荐的文章
会员中心 联系我 留言建议 回顶部
复制成功!