Рисование в Google диаграммах становится очень медленным в предложении If - PullRequest
0 голосов
/ 03 сентября 2018

У меня есть столбчатая диаграмма Google, которая работает нормально, хотя в некоторых случаях может случиться, что набор данных, возвращенный из SalesQueryN.asp, будет пустым. Чтобы избежать отображения сообщения об ошибке, я попытался использовать

if (condition) {} else {} 

предложение, чтобы проверить, пустой ли набор данных, в противном случае он должен нарисовать диаграмму.

Без if график рисуется мгновенно, но эта линия

chart.draw(data, google.charts.Bar.convertOptions(options));

находится в предложении else {}, браузер зависает примерно на 30 секунд. В конце концов он отображает часть графика, но производительность не приемлема, и он не отображает правильный полный график.

Вот код Ajax, который я использую для рисования диаграммы.

    google.charts.setOnLoadCallback(function() { drawsdr(cYear,cMonth,'CST')});

    function drawsdr(rY, rM, rS) {
      if (rY === undefined) {
          rY = Date().getFullYear();
      }
      if (rM === undefined) {
          rM = Date().getMonth();
      }
      if (rS === undefined) {
          rS = 'CST';
      }
      $.ajax({
          url: "api/SalesQueryN.asp?P=T&Y=" + rY + "&M=" + rM + "&S=" + rS,
          dataType: "json",
          async: true,
          success: function (jsonData) {
             var data = new google.visualization.arrayToDataTable(jsonData);
             var chart = new google.charts.Bar(document.getElementById('s'+rS));
             var options = { 
                 title: rY + '-' + rM,
                 legend: { position: 'bottom' },
                 bar: { groupWidth: '80%' },
                 fontSize: xFS, fontName: xFo,
                 isStacked: false,
                 seriesType: 'bars',
                 vAxis: { format: '#,###' },
                 hAxis: { textStyle: { fontSize: xFS } }
             };
             if (data.getColumnLabel(0) == "empty") {
                document.getElementById("sCST").innerHTML = "<p>There is no data to display for " + rY + "-" + rM + "</p>";
             } else {
                chart.draw(data, google.charts.Bar.convertOptions(options));
             }
          },
          error: function (response) {
             alert(Object.keys(response));
             //alert(response.statusText);
             alert(response.responseText);
          }
        });
      }

Я не совсем уверен, почему предложение if так сильно влияет на производительность.

Теперь у меня вопрос: как я могу проверить таблицу данных, не замедляя рисование диаграммы?

...