来自Curl / Ajax

时间:2017-07-18 15:51:19

标签: php jquery ajax curl

一般信息

大家好,

由于这个问题我决定发布或不发布,但我说地狱,为什么不呢!

我在做什么?

我有一系列音乐曲目被推入一个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');
            }
        }
    });
});

0 个答案:

没有答案