【发布时间】:2011-12-22 10:34:06
【问题描述】:
我有一些看起来像这样的代码(我省略了对问题不重要的部分):
$.ajax({
type: "POST",
url: "prepXML.php",
data: "method=getartists&user=" + userName + "&amount=" + amount,
dataType: "xml",
success: function(xml) {
$("artist", xml).each(function(){
// calculate and output some stuff and then call getTracks()
getTracks(artistName, artistNamePOST, artistPlaycount, divId, artistId);
});
}
});
function getTracks(artistName, artistNamePost, artistPlaycount, divId, artistId){
$.ajax({
type: "POST",
url: "prepXML.php",
data: "method=gettracks&user=" + userName + "&artist=" + artistNamePOST + "&playcount=" + artistPlaycount,
dataType: "xml",
success: function(xml){
// calculate and output some stuff
});
}
});
当它运行时,它会调用 getTracks() 五十次,并在很短的时间内产生相当多的(服务器)CPU 负载,直到全部完成。我想做的是一次将 AJAX getTrack() 查询分组为例如 5 个,等到这五个完成,然后调用接下来的五个,等到接下来的五个完成,再调用接下来的五个等等。这样做的目的是基本上同时进行更少的查询(更少和更均匀地分布 CPU 负载)。
我不确定如何或什至可以做到这一点,因为它在某种程度上超越了 AJAX 的意义,但如果可能的话,我仍然希望完成这项工作。有人可以指出我正确的方向吗?谢谢。
为了更好地了解我需要这个以及应用程序的作用,这里有一个指向 app 的链接。可以使用任何 lastfm nick 来试用它(如果你没有,你可以使用我的 - “pootzko”)。我希望允许我将链接放在帖子中(?),如果没有,请随意删除它..
【问题讨论】:
-
当您执行
method=getartist时,为什么不只返回一组曲目以及您的艺术家数据,那么您只需要执行一次服务器调用(每个艺术家)。也许有一个名为getartistwithtracks的方法 -
@musefan - 这与 lastfm api 一起使用,其中 getartists 首先查询 lastfm 并获取最受听的 arist 列表,之后它必须对 lastfm 进行新的单独查询以获取有关每个轨道的信息艺术家。
标签: javascript jquery synchronization grouping