2015-08-27 45 views
2

我正在開發一個數據可視化,我需要從我的文件系統加載多個JSON文件,並從web服務中獲取另一個。我目前使用順序方法(JSON文件被加載d3.js):使用Javascript加載順序和同時文件

d3.json('Cata_provincias.geojson', function(contents){ 
    provincias_json = contents 
    d3.json('Cata_girona.geojson', function(contents_girona){ 
     girona_json = contents_girona 
     d3.json('Cata_barcelona.geojson', function(contents_barcelona){ 
      barcelona_json = contents_barcelona 
      d3.json('Cata_tarragona.geojson', function(contents_tarragona){ 
       tarragona_json = contents_tarragona 
       d3.json('Cata_lleida.geojson', function(contents_lleida){ 
        lleida_json = contents_lleida 
        init() 
       }) 
      }) 
     }) 
    }) 
}) 

我的問題是,我會得到一個更好的加載時間,如果我同時獲取所有的文件嗎?這是最好的方法嗎?

編輯:我知道如何做同時加載。我想知道的是它是否會加速初始負載,並且這是一個很好的做法。

+0

要載入多個文件,請使用[queue.js](https://github.com/mbostock/queue)。 –

回答

2

您可以按順序調用所有json函數,並讓每個回調觸發init函數。然後,init函數將不得不計數已經進行了多少次調用,並且只有當計數達到正確的值時,才進行實際的初始化。

d3.json('Cata_provincias.geojson', function(contents){ 
    provincias_json = contents 
    init() 
}) 
d3.json('Cata_girona.geojson', function(contents_girona){ 
    girona_json = contents_girona 
    init() 
}) 
d3.json('Cata_barcelona.geojson', function(contents_barcelona){ 
    barcelona_json = contents_barcelona 
    init() 
}) 
d3.json('Cata_tarragona.geojson', function(contents_tarragona){ 
    tarragona_json = contents_tarragona 
    init() 
}) 
d3.json('Cata_lleida.geojson', function(contents_lleida){ 
    lleida_json = contents_lleida 
    init() 
}) 

var count = 0 
function init() { 
    if(++count < 5) 
     return 

    // Do actual initialization here 
} 
+0

我知道如何做到同時加載。我想知道的是,它是否會加快負載,如果這是一個很好的做法。 – Phob1a

+0

我的答案顯示了一個更好的***方法(您問過你是否是最好的,對嗎?),並且它會*加速加載,因爲您將並行處理多個併發請求。 – Amit

+0

我測試了它,而同步方法的確加快了加載速度。堅持它不完全是我問這個答案,其評論包含其他用戶可能需要的所有信息。我接受它。 – Phob1a