大家好,
由于这个问题我决定发布或不发布,但我说地狱,为什么不呢!
我有一系列音乐曲目被推入一个ajax请求,然后我在php中循环并将每个曲目传递给一个curl请求然后关闭并为他们特定曲目拉下coverart!当然,coverart是.jpg或.png格式的链接,因此返回rihanna.jpg。然后我将它们推入另一个数组,这是我的最终结果,然后将其推回到我的ajax结果(数据),然后我从那里开始。
当我推进60首曲目时,响应时间约为30秒,这是一个漫长的屁股等待!我正在尝试尽快检索信息,这样我就可以更新最终用户GUI,而不会在加载数据的过程中留下加载条。
现在我调查了这一点以及我的理论背后为什么它如此缓慢,要么是响应部门缺乏api呼叫,还是卷曲正在肆虐并且放慢速度!我听说过curl_multi
和所有那些从未使用过的人,也没有我没有开始!我甚至不确定这是否会解决这个问题。有人可以请输入这个来试试我的想法吗?我将获得这种速度,还是可以加快速度?在我在循环中创建ajax调用之前,我认为是因为这样我做了一个更改,将所有轨道推送到一个数组,然后传递到一个ajax但它没有加快任何速度。相同的响应率说实话!
我的PHP代码:
function curlGet($url, $proxy = null)
{
$ch = curl_init($url);
@curl_setopt($curl, CURLOPT_HTTPHEADER, array("Connection: close"));
@curl_setopt($ch, CURLOPT_NOSIGNAL, 1);
@curl_setopt($curl, CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V4);
if (isset($proxy)) {
if ($proxy['enable'] === '1') {
$proxy['user'] === '' || @curl_setopt($ch, CURLOPT_PROXYUSERPWD, $proxy['user'].':'.$proxy['pass']);
@curl_setopt($ch, CURLOPT_PROXY, $proxy['host']);
}
}
@curl_setopt($ch, CURLOPT_CONNECTTIMEOUT_MS, 400);
@curl_setopt($ch, CURLOPT_TIMEOUT, 10);
@curl_setopt($ch, CURLOPT_HEADER, 0);
@curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$response = curl_exec($ch);
curl_close($ch);
return $response;
}
$trackarray = $_POST['trackarray'];
$returnarray = [];
foreach($trackarray as $i => $track) {
$strippedarray = explode(" - ", $track, 2);
$strippedartist = $strippedarray[0];
$strippedtrack = $strippedarray[1];
$ArtistTrack = "http://ws.audioscrobbler.com/2.0/?method=track.getInfo&api_key=KEYHERE&artist=".$strippedartist."&track=".$strippedtrack."&format=json";
$ArtistL = "http://ws.audioscrobbler.com/2.0/?method=artist.getInfo&api_key=KEYHERE&artist=".$strippedartist."&format=json";
$AToutput = json_decode(curlGet($ArtistTrack, $proxy), true);
$Aoutput = json_decode(curlGet($ArtistL, $proxy), true);
if($AToutput == "" || $AToutput['track']['album']['image']['3']['#text'] == "") //Artist-Track failed, lets try just arist!
{
if($Aoutput == "" || $Aoutput['artist']['image']['3']['#text'] == "") //If Artist Failed, serve default-coverart.png
{
array_push($returnarray, "../location/cover-default.png");
}
else //Artist success, serve artist.png
{
array_push($returnarray, $Aoutput['artist']['image']['3']['#text']);
}
}
else //Artist-Track Success, Serve artist-track.png
{
array_push($returnarray, $AToutput['track']['album']['image']['3']['#text']);
}
}
echo json_encode($returnarray);
我的Javascript:
$('#spinner-db').removeClass('hide');
var windowwidth = $(window).width();
var blockwidth = 350;
var rowcount = parseInt(windowwidth / blockwidth);
var buffersize = parseInt(rowcount * 4);
var endindex = parseInt(buffersize * 2);
var loadimagearray = localcontent.slice(0,endindex);
var currentdatabase = "#database-entries";
$.ajax({
url : '/location/script.php?cmd=commandhere',
cache: false,
type: 'POST',
data: {trackarray: loadimagearray}
}).done(function(data)
{
$.each( loadimagearray, function( i, l ) //Loop through each item in array
{
if($(currentdatabase+' li[track-info="' + l + '"] img').attr('src') == "../assets/img/cover-default.png")
{
$(currentdatabase+' li[track-info="' + l + '"] img').attr('src',JSON.parse(data)[i]);
if(i == (loadimagearray.length - 1)) //Hide Loader
{
$('#spinner-db').addClass('hide');
}
}
});
});