В настоящее время я делаю 3 запроса GET для файлов JSON с помощью Axios, загружаются ли они одновременно или один за другим? - PullRequest
1 голос
/ 10 октября 2019

Приложение, которое я создаю, загружает 3 файла JSON, чтобы получить информацию о персонажах, заклинаниях и многом другом. В настоящее время у меня есть 3 функции, которые используют axios для выполнения GET-запросов, а затем для хранения ответов, однако мне интересно, замедляю ли я время загрузки, потому что, честно говоря, я не уверен, загружаются ли эти файлы JSON одновременно или один за другим,На загрузку каждого файла уходит около 45 мс, поэтому, если они загружаются один за другим, я смотрю время загрузки около 135 мс, и оно мне не нравится.

В настоящее время я пробовал 2 способано, честно говоря, я не вижу разницы во времени загрузки на вкладке сети Chrome. Если вам интересно, функции находятся в моем хранилище Vue.js Vuex, а вызовы выполняются в подключенном хуке App.vue.

Первый способ использует 3 отдельные функции, каждая из которых выполняет свой собственный запрос GET. Затем эти функции вызываются одна за другой.

Вызов:

this.$store.dispatch('getChampions')
this.$store.dispatch('getSummonerSpells')
this.$store.dispatch('getSummonerRunes')

Функции:

getChampions({commit, state}){
    axios.get("https://ddragon.leagueoflegends.com/cdn/9.14.1/data/en_US/champion.json")
    .then((response) => {
        commit('champions', {
            champions: response.data.data
        })
    })
    .catch(function (error) {
        console.log(error);
    })
},
getSummonerSpells({commit, state}){
    axios.get("http://ddragon.leagueoflegends.com/cdn/9.14.1/data/en_US/summoner.json")
    .then((response) => {
        commit('summonerSpells', {
            summonerSpells: response.data.data
        })
    })
    .catch(function (error) {
        console.log(error);
    })
},
getSummonerRunes({commit, state}){
    axios.get("https://ddragon.leagueoflegends.com/cdn/9.14.1/data/en_US/runesReforged.json")
    .then((response) => {
        commit('summonerRunes', {
            summonerRunes: response.data
        })
    })
    .catch(function (error) {
        console.log(error);
    })
}

И, используя второй способ, у меня есть 1 функция типаэто:

Звонок:

this.$store.dispatch('getRequirements')

Функция:

getRequirements({commit, state}){
    axios.all([
        axios.get('https://ddragon.leagueoflegends.com/cdn/9.14.1/data/en_US/champion.json'),
        axios.get('http://ddragon.leagueoflegends.com/cdn/9.14.1/data/en_US/summoner.json'),
        axios.get('https://ddragon.leagueoflegends.com/cdn/9.14.1/data/en_US/runesReforged.json')
    ])
    .then(axios.spread((response1, response2, response3) => {
        commit('champions', {
            champions: response1.data.data
        })
        commit('summonerSpells', {
            summonerSpells: response2.data.data
        })
        commit('summonerRunes', {
            summonerRunes: response3.data
        })
    }))
}

Ответы [ 2 ]

2 голосов
/ 10 октября 2019

Вы выполняете запросы параллельно, поэтому ваш браузер попытается выполнить их одновременно. Или нет, это до браузера .

Вы можете использовать колонку Network консоли вашего браузера (aka Waterfall в Chrome), чтобы увидеть, что происходит.

enter image description here

Если ваш вопрос

«есть ли разница между ними?»

ответ "нет" в зависимости от времени.

Если вы начнете сталкиваться с ошибками с каким-либо конкретным запросом, ваш первый вариант будет более надежным, поскольку axios.all отклонит обещание в случае неудачи.


Если вы хотите ускорить этовверх, вы можете создать сервис, который объединяет три результата в один, поэтому вы делаете только один запрос. Затем добавьте кеш для дополнительного ускорения.

0 голосов
/ 10 октября 2019

Когда все запросы будут выполнены, вы получите массив, содержащий объекты ответа в том же порядке, в котором они были отправлены. Commit() вызывается только после завершения обоих ваших запросов.

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