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

Posted

技术标签:

【中文标题】如何避免 Spotify 应用程序中同步 Web 服务调用的延迟?【英文标题】:How to avoid delay in synchronous web service call in Spotify application? 【发布时间】:2012-04-04 17:58:18 【问题描述】:

朋友们,

对于我的 spotify 应用程序,我正在为 50 首歌曲调用网络服务。

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

它将获取摇滚类别的歌曲。 因此,对于每首歌曲,我都会调用 3 个网络服务并获得响应。 我已使 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,

即使在提到超时变量之后,它也会陷入无限等待。 谁能告诉我如何改进这个网络服务调用?

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

【问题讨论】:

【参考方案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 调用,并且您的页面可能加载非常缓慢...也许您可以分解您的调用吗?

【讨论】:

以上是关于如何避免 Spotify 应用程序中同步 Web 服务调用的延迟?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Spotify Web API 的 PUT 命令通过 Android 应用程序暂停我的 Spotify

如何使用其 Web-API 让 IOS 应用播放 Spotify 播放列表?

如何在 Android 中指定 Spotify Web API 的国家代码?

我可以在 Xcode 中使用 Spotify Web API 来开发原生 iOS 应用程序吗?

Spotify 谜题:避免异常处理错误

如何通过 spotify api 获取用户跟踪信息