2012-03-20 73 views
1

朋友,如何避免Spotify应用程序中的同步Web服务调用延迟?

对于我的Spotify应用程序,我打电话给50个歌曲的web服务。

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

它将获取Rock类别的歌曲。 因此,对于每首歌曲,我打电话给3个webservices &获取响应。 我已经使Web服务调用同步,因为我在数组中存储响应数据 我正在使用jQuery的$ ajax调用。

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

即使在提到超时变量后,它会崩溃到无限的等待状态。 有人可以告诉我如何改善此Web服务调用?

对于我的应用程序,我记住我的应用程序最初需要一段时间才能加载,但一旦加载,它将很快执行。 我在这里使用同步调用,因为我想在合适的索引处将值存储到数组中,以防异常调用时不会锻炼。

回答

0

我建议你永远避免同步呼叫。同步呼叫被阻塞,这对用户体验非常不利...特别是如果您做3 * 50请求!

你总是有办法异步做到这一点。例如,你可以使用JavaScript的闭包存储标签指数在回调函数:

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的电话和您的网页可能会加载速度非常缓慢。 ..也许你可以分解你的电话?

+0

感谢您的回复。 – JMoh 2012-03-20 09:47:16

相关问题