我正在创建一个名为“你的音乐生活”的网络应用程序,用户插入他/她的生日,应用程序显示自诞生以来每个生日点击的顶部广告牌。该应用程序与Last.fm api对话,以检索每首歌曲的专辑封面。目前,应用程序需要一段时间来编译所有专辑封面,并且有人建议通过将所有API调用组合到单个请求中来加快速度。我虽然有点新手,但我不确定这可以做到。所以我的问题是:如何将多个呼叫合并为一个请求?
以下是应用:http://www.dailyspiro.com
关键代码:
function compileDisplay(birthDays) {
// create an HTML list that for each birthday displays top song, artist, and album art
htmlObj = {}
for (i = 0; i < birthDays.length; i++) {
var age = birthDays[i][0]; // age isn't equal to i if user was born before 1958
var date = birthDays[i][1];
var track = billboard[date]['song'];
var artist = billboard[date]['artist'];
getAlbumArt(age, track, artist, birthDays);
}
}
function getAlbumArt(age, track, artist, birthDays) {
$.getJSON("http://ws.audioscrobbler.com/2.0/?method=track.getInfo&api_key=(myApiKey)&artist=" + artist + "&track=" + track + "&format=json&callback=?", function (data) {
try {
var image = data.track.album.image[2]['#text'];
if (image == 'http://cdn.last.fm/flatness/catalogue/noimage/2/default_album_medium.png') {
throw 'generic image';
}
} catch (err) {
var image = 'images/' + track + '.jpg';
}
compileHtml(age, track, artist, image, birthDays)
})
}
答案 0 :(得分:3)
是否可以批量API调用取决于API本身。我快速浏览了一下API,但没有发现任何允许批处理多个操作的内容。我还检查了一种允许一次检索多个音轨信息而没有任何成功的方法。看来你运气不好。
但是,您可以实现某种缓存以避免始终执行这些请求。例如,您可以拥有自己的服务器端服务,该服务充当lastfm API和客户端应用程序之间的中间层。然后,服务器端API将实现缓存和任何其他优化逻辑。