javascript - 移动设备上的图表加载时间和动画缓慢

标签 javascript jquery html charts chart.js

我有一个使用 Chart.js 构建的图表,它以 0 值开头。单击提交按钮后,数据将从外部数据库加载并在图表上更新。这在计算机浏览器上按预期工作。

用不到一秒钟的时间从 0 值到达图表上显示的新数据。但是当我尝试在手机上访问这个页面时,它仍然有效但加载时间很长。随着点慢慢上升到新位置,图表需要大约 10 秒才能更新。有时甚至中途卡住。

我用固定值而不是从数据库中获取它们进行测试,并且加载时间在手机上仍然延迟。因此我认为它与 Chart.js 选项本身有关。

使用 Chart.js 时,是否可以减少移动设备上的加载时间?我真的没有在那里看到任何优化选项。有人遇到过类似的问题吗?下图显示了查看 0 值和加载值的图表。

Javascript

$( document ).ready(function() {

    var lineData = {
        labels: ["Lap 1", "Lap 2", "Lap 3", "Lap 4", "Lap 5", "Lap 6", "Lap 7", "Lap 8", "Lap 9", "Lap 10", "Lap 11", "Lap 12"],
        datasets: [{
            fillColor: "rgba(255,255,255,0)",
            strokeColor: "rgba(63,169,245,1)",
            pointColor: "rgba(63,169,245,1)",
            pointStrokeColor: "#fff",
            data: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
        }, {
            fillColor: "rgba(255,255,255,0)",
            strokeColor: "rgba(102,45,145,1)",
            pointColor: "rgba(102,45,145,1)",
            pointStrokeColor: "#fff",
            data: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
        }]
    }

    var lineOptions = {
        responsive: true,
        animation: true,
        pointDot: true,
        scaleOverride : false,
        scaleShowGridLines : false,
        scaleShowLabels : true,
        scaleSteps : 4,
        scaleStepWidth : 25,
        scaleStartValue : null
    };

    //Create Line chart
    var ctx = document.getElementById("lineChart").getContext("2d");
    myNewChart = new Chart(ctx).Line(lineData, lineOptions);

    $("#form").submit(function(e) {
        e.preventDefault();
        e.stopPropagation();
        var race1 = $( "#racename1" ).val();
        var race2 = $( "#racename2" ).val();
        var race1Data = [];
        var race2Data = [];

        if ((race1.length > 0 && race2.length > 0) &&
                (race1.toLowerCase() != "select race" && race2.toLowerCase() != "select race")) {

            $.post("updateStatChartServlet", {raceName1 : race1, raceName2 : race2},  function(responseText) {
                var temp = responseText;
                var race1Str = temp.substring(0,temp.indexOf("|"));
                var race2Str = temp.substring(temp.indexOf("|")+1,temp.length);
                race1Data = race1Str.split(",");
                race2Data = race2Str.split(",");

                var count = 0;

                lineData.datasets.forEach(function(set){
                    set.data.forEach(function(){
                        if(race1Data[count].trim() != ""){
                            myNewChart.datasets[0].points[count].value = race1Data[count];
                        }
                        else{
                            myNewChart.datasets[0].points[count].value = 0;
                        }

                        if(race2Data[count].trim() != ""){
                            myNewChart.datasets[1].points[count].value = race2Data[count];
                        }
                        else{
                            myNewChart.datasets[1].points[count].value = 0;
                        }
                        myNewChart.update();
                        count++;
                    });
                });
            });
        }
        else{
            alert("Fill Both Race Fields with Valid Data");
        }
    });

});

HTML

<form id="form">
<div class="form-group col-sm-4 col-lg-4">
    <select id="drivername1" class="form-control">
    </select>
    <select id="racename1" class="form-control">
        <option value="select race">Select Race</option>
    </select>
</div>

<div class="form-group col-sm-4 col-lg-4">
    <select id="drivername2" class="form-control">
    </select>
    <select id="racename2" class="form-control">
        <option value="select race">Select Race</option>
    </select>
</div>

<div class="form-group col-sm-4 col-lg-4">
    <button id="update" type="submit">Update</button>
</div>

零值 Zero Value

加载值 Value Loaded

最佳答案

您正在二级循环中更新图表,从那里删除它并在设置所有数据后更新您的图表。并尝试使用迭代 for 循环而不是 forEach,它也可以提高性能。

关于javascript - 移动设备上的图表加载时间和动画缓慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36267043/

相关文章:

javascript - 即使 grunt-contrib-symlink 找不到路径,grunt 如何继续构建

javascript - 使用 jquery onclick 函数在按钮上添加和删除事件类

javascript - 当我通过 php 包含 datepicker js 和 css 文件时,包含不起作用,但如果我将所有代码放在单个 php 页面中,则可以工作

javascript - 使用javascript同步两个div

Outlook 2016 中的 HTML CSS 布局

javascript - 如何从嵌套的 JSON Array 对象中获取具有最大值的元素

javascript - 使用 key 时无法获取 d3 选择的更新数据

javascript - 保存 react 文件时 Visual Studio 代码错误?

javascript - 使用 jquery 更改内部选定元素的功能?

javascript - PHP 从下拉列表中获取文本