javascript - 将多个 API 调用合并为一个请求

标签 javascript jquery ajax performance api

我正在制作一个名为“Your Life in Music”的网络应用程序,用户输入他/她的生日,该应用程序就会显示自出生以来每个生日的热门广告牌点击率。该应用程序与 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)
  })
}

最佳答案

是否可以批量调用 API 取决于 API 本身。我快速查看了 API,没有发现任何允许批处理多个操作的内容。我还检查了一种允许一次检索多个轨道信息但没有成功的方法。看来你运气不好。

但是,您可以实现某种缓存以避免始终执行这些请求。例如,您可以拥有自己的服务器端服务,充当 lastfm API 和客户端应用程序之间的中间层。然后,该服务器端 API 将实现缓存和任何其他优化逻辑。

关于javascript - 将多个 API 调用合并为一个请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18220601/

相关文章:

Javascript 在 IE 中被调用,但在 Chrome 和 FF 中不被调用

javascript - 在 div 中使用 jquery 无限滚动仅显示 10 个元素

jQuery:当 div 在浏览器窗口中可见时的通知

php - get_file_contents 刷新 div

javascript - 使用javascript从外部页面获取html元素

javascript - 使用turbolinks时如何在jquery调用后更新vuejs组件数据

javascript Uncaught ReferenceError onclick

javascript - 计算数组对象的出现次数

javascript - toastr (jquery) 只能显示一次

php - 使用自动完成从 MYSQL 中获取数据未找到结果