2013-04-23 72 views
0

我正在使用xampp在本地計算機上工作,並且每個其他ajax請求的工作都非常快速。我目前的應用程序需要21秒加載3.5千字節的數據。與cURL和PHP結合的AJAX請求需要太長時間才能加載

如果你問我,這有點慢。那麼我的軟件在做什麼?

該軟件有4個單選按鈕。用戶選擇一個,然後一個AJAX請求創建

var radio = $('input[name="selection"]:checked').val(); 
var hidden = $('#hiddenFive').val(); 
$.ajax 
({ 
    type: 'GET', 
    url: 'curl.php', 
    data: {type: radio, region: 'Hampshire', hidden: hidden}, 
    success: function(response, textStatus, XMLHttpRequest) 
    { 
     var obj = jQuery.parseJSON(response); 
     var strin = ''; 
     for(var i = 0; i < obj.length; i++) 
     { 
      strin += "<b>Name of " + radio + ": </b>" + obj[i].name + "<b> | Region: </b>" + obj[i].region + "<br>";  
     } 
     $('#result').html(strin); 
    }, 
    error: function(response, status, error) 
    { 
     alert("Error"); 
    } 
}); 

的數據被髮送到該站點curl.php,它發送一個捲曲請求到外部網站。我寫了外部的草書,因爲它是在同一個文件夾中,我們就應該像它是外部的,我們從它需要cURL數據(你知道作業)

所以,現在的URL看起來像這樣

http://localhost/htmlAssignment/5/curl.php?type=town&region=Hampshire&hidden=hiddenFive 

而且curl.php保存在變量這些參數,然後將其發送到Web service.php

<?php 
$type = $_GET['type']; 
$region = $_GET['region']; 
$hidden = $_GET['hidden']; 
$url = "http://localhost/htmlAssignment/webservice.php?type=" . $type . "&region=" .$region. "&hidden=".$hidden; 
$ch = curl_init($url); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
curl_setopt($ch, CURLOPT_BINARYTRANSFER, true); 
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); 
$output = curl_exec($ch); 
curl_close($ch); 
echo $output; 
?> 

的webservice.php

CHEC KS如果隱藏的價值是hiddenFive,什麼是正確的,然後調用DB-功能

if(isset($_GET['type']) && isset($_GET['region']) && $_GET['hidden'] == 'hiddenFive') 
{ 
    $array = array(); 
    $region = $_GET['region']; 
    $type = $_GET['type']; 
    $array = $db->getMultiDataPOI($type, $region); 
    echo json_encode($array);   
} 

我的數據庫功能看起來像這樣

function getMultiDataPOI($type, $region) 
    { 
     $getMultiSQL = "SELECT ID, name, type, country, region, lon, lat, description FROM pointsofinterest WHERE type = :type AND region = :region"; 
     $getMultiPrepare = $this->prepare($getMultiSQL); 
     $getMultiPrepare->bindParam(':type', $type); 
     $getMultiPrepare->bindParam(':region', $region); 
     $getMultiPrepare->execute(); 
     $getMultiResult = $getMultiPrepare->fetchAll(); 
     return $getMultiResult; 
    } 

這20秒鐘後得到的數據通常和顯示它應該,但它需要20秒,如果你問我什麼是奇怪的。這麼長時間以來可能會出現這個問題?正如我所說,我正在使用xampp和其他任何使用相同webservice的AJAX請求即時加載localhost。爲什麼這需要這麼長時間?

這是一個屏幕,如果它從FireBug幫助。我希望你能閱讀它。

FireBugScreen of Request

+0

你有你的列被索引看起來像查詢需要很長時間。 – 2013-04-23 11:21:05

+0

開始隔離自下而上。首先對最內層的功能(DB功能)進行基準測試,然後移動到web服務等等。這應該確切地指出慢度開始出現的位置。當你發現問題時,調試起來要容易得多 - 現在對我們來說這只是一個猜測遊戲。 – 2013-04-23 11:22:00

+0

你爲什麼不直接打電話給你的web服務? – 2013-04-23 11:22:19

回答

0

只是從我的經驗,我發現localhost來常引起奇怪的行爲,如你描述。你是否簡單地嘗試將你的本地主機引用改爲127.0.0.1並使用它?本地主機必須仍然做一個名稱查找,這有時是不可靠的,從您的主機文件,請參閱What is the difference between 127.0.0.1 and localhost

另外我想嘗試直接打開PHP服務文件,你在你的AJAX調用一個,以確保它自己加載速度很快。由於它正在執行一個SQL查詢,因此可能會有一些與您的查詢有關的內容,甚至可能是您的MySQL配置導致了一些滯後。

另一方面,我會謹慎使用您的webserver.php文件。您的所有請求數據都沒有被過濾,直接進入您的數據庫,從而導致您的應用程序打開SQL注入。

+0

您不必擔心SQL注入。確實,我只是將get參數保存在變量中,但無論如何它們都被'bindParam'在數據庫中轉義。我已經將它改爲127.0.0.1,但這沒有什麼區別。但是,謝謝! – devShuba 2013-04-23 11:35:40

相關問題