Javascript中的顺序vs同步文件加载

时间:2015-08-27 08:32:10

标签: javascript d3.js

我正在开发一个数据可视化,我需要从我的文件系统加载多个JSON文件,并从Web服务中获取另一个JSON文件。我目前正在使用顺序方法(json文件正在加载d3.js):

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()
                })
            })
        })
    })
})

我的问题是,如果我同时获取所有文件,我会获得更好的加载时间吗?这是最好的方法吗?

编辑:我知道如何同时加载。我想知道的是它是否能加快初始负荷,而且这是一个很好的做法。

1 个答案:

答案 0 :(得分: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 
}