Как избежать задержки синхронного вызова веб-службы в приложении Spotify?

Друзья,

Для моего приложения Spotify я вызываю веб-сервисы для 50 песен.

var search = new models.Search("Rock");
search.localResults = models.LOCALSEARCHRESULTS.APPEND;
search.pageSize=50;

Он будет получать песни категории Rock. Итак, для каждой песни я звоню 3 веб-сервисам и получаю ответ. Я сделал вызов веб-службы синхронным, потому что я храню данные ответа в массиве. Я использую вызов $ ajax из jquery.

type: 'GET',
url: 'http://ws.audioscrobbler.com/2.0/?method=artist.getinfo&artist=artistname&api_key=b25b959554ed76058ac220b7b2e0a026&format=json',
dataType: 'json',
timeout: 1000,

Даже после упоминания переменной тайм-аута происходит бесконечное ожидание. Может ли кто-нибудь сказать мне, как улучшить этот вызов веб-службы?

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


person JMohasin    schedule 20.03.2012    source источник


Ответы (1)


Я рекомендую вам всегда избегать синхронных вызовов. Синхронные вызовы блокируются, что очень плохо для пользователя... особенно если вы делаете 3*50 запросов!

У вас всегда есть способ сделать это асинхронно. Например, вы можете использовать закрытие javascripts для хранения индекса вкладки в вашей функции обратного вызова:

var tab = [];
for (var i=0 ; i < N ; i++) {
  $.ajax({
    type: 'GET',
    url: 'http://ws.audioscrobbler.com/2.0/?method=artist.getinfo&artist=artistname&api_key=b25b959554ed76058ac220b7b2e0a026&format=json',
    dataType: 'json',
    timeout: 1000,
    success: (function(i){return function(data,textStatus,jqXHR){
      tab[i] = data;
    }})(i)
  });
}

Кроме того, я обнаружил, что 3 вызова * 50 песен - это много вызовов AJAX, и ваша страница может загружаться очень медленно... Может быть, вы можете разложить свои вызовы на множители?

person Thomas Guillory    schedule 20.03.2012