2016-11-19 11 views
0

私はページに複数(10)のグラフを表示するためにグラフグラフを使用しています。 Dygraphオブジェクトはforループで作成されます。これらのグラフはすべて、ループの終了後すぐに表示/描画されます。約50000の値を持つDygraphオブジェクトを作成するのに約400msかかるので、ページにレスポンスがない場合は約4秒です(10グラフ)。各ループ・パスの直後に各グラフを描画する方法はありますか?forループで各パスの直後にDygraphsを描画する方法は?

function drawGraph(chartData, chartOptions) { 
    var graph = new Array(); 
    var index = 0; 
    for (var chart in chartData) { 
    graph[index] = new Dygraph(document.getElementById(chart + "_graph"), chartData[chart], chartOptions[chart]); 
    index++; 
    } 
} 
+0

の遅れと、それはあなたの作業ページの例を示しすることは可能ですか?たくさんのデータで試してみるのは難しいです。 – odedta

+0

'drawCallback'でjQueryを使って' fadeIn() 'を試してみてください。おそらくそれは一度に一つずつ消えるでしょう... – odedta

答えて

0

あなたが保存されたデータ介して1回の反復処理によって1にタイマーを使用して、一度に各グラフ1を描き、その後、これらのVARSにデータを保存し、グローバルスコープに関数の外にいくつかのVARSを定義することができますそれらの間...

/* define the parts of your function outside of the scope of the drawGraph() function */ 
 
var idx = 0; 
 
var _chartData = []; 
 
var _chartOptions = []; 
 
var _charts = []; 
 
var graph = []; 
 

 

 
function drawGraph(chartData, chartOptions) { 
 
    graph = []; // initialize 
 
    idx = 0; 
 

 
    /* store the relevant data into memory */ 
 
    for (var chart in chartData) { 
 
    _chartData[chart] = chartData[chart]; 
 
    _chartOptions[chart] = chartOptions[chart]; 
 
    _charts.push(chart); 
 
    } 
 

 
    /* start the process of drawing each graph one by one */ 
 
    draw_next(); 
 
} 
 

 
function draw_next() { 
 

 
    // grab our data saved in memory 
 
    var tmp_chart = _charts[idx]; 
 

 
    /* this tells us when no more charts exist (sorta) */ 
 
    if (tmp_chcart != undefined) { 
 
    graph[idx] = new Dygraph(document.getElementById(tmp_chart + "_graph"), _chartData[tmp_chart], _chartOptions[tmp_chart]); 
 
    idx++; 
 

 
    /* in 1 ms run this function again */ 
 
    setTimeout(function() { 
 
     draw_next(); 
 
    },1); 
 
    } 
 
}

+0

ありがとう多く!グラフ描画をシリアライズするには1msで十分です。 – Ales

関連する問題