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

Друзья,

Для моего приложения 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,

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

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

1 Ответ

0 голосов
/ 20 марта 2012

Я рекомендую вам избегать синхронных звонков.Синхронные вызовы блокируют, что очень плохо для пользователя… особенно если вы делаете 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 и вашистраница может загружаться очень медленно ... Может быть, вы можете проанализировать ваши звонки?

...