如何避免Spotify应用程序中的同步Web服务调用延迟?
问题描述:
朋友,如何避免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服务调用?
对于我的应用程序,我记住我的应用程序最初需要一段时间才能加载,但一旦加载,它将很快执行。 我在这里使用同步调用,因为我想在合适的索引处将值存储到数组中,以防异常调用时不会锻炼。
答
我建议你永远避免同步呼叫。同步呼叫被阻塞,这对用户体验非常不利...特别是如果您做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的电话和您的网页可能会加载速度非常缓慢。 ..也许你可以分解你的电话?
感谢您的回复。 – JMoh 2012-03-20 09:47:16