2012-11-27 81 views
12

(重要)編輯3:自身運行testajax2.php和NOT AJAX。持續時間大致相同,爲1.02-1.03秒。所以我猜這意味着問題出在PHP-MYSQL或XAMPP上?當通過phpmyadmin查詢運行時,結果如下:顯示行0 - 29(總共約50個,查詢花了0.0015秒)。看起來問題不在於Ajax,而是可能在PHP中。幫助請...(我也只是編輯的問題標題。)PHP與MySQL是慢

答:添加下面一行在位於」C:\Windows\System32\drivers\etc」

127.0.0.1 localhost 



面前的問題hosts文件: 這是正常的jQuery Ajax和SQL查詢的另一邊有1秒的 最短持續時間?我試過$.get$.post$.getjson$.ajax({type:'POST'})$.ajax({type:'GET'})。正如我所說,這是最低限度的,甚至可能會變得更糟。我懷疑這是sql查詢,當我在phpmyadmin中嘗試它們時,結果非常快。

它不也很重要,如果查詢是非常簡單的表只有2個元素,它仍然會按照1秒最小。我使用最新的XAMPP,我不知道它是否重要,但我通過本地主機和127.0.0.1訪問這些文件。謝謝!

編輯:感謝您的答覆,夥計們。我在本地環境中運行它,在我製作這些文件的同一檯筆記本電腦上運行。 Jquery已更新。返回的值/數組是json_encoded。我正在使用mysqli。數據庫在InnoDB中,內部只有大約5個表格,並且幾乎沒有任何內容。這裏是一個非常簡單的示例查詢:

的index.php

var test_id =2; 
    testcall(); 
    function testcall(){ 
     $.ajax({ 
      url: 'testajax2.php', 
      type: 'POST', 
      data: {test_id: test_id}, 
      success: function(data){ 

      }  
     }); 
    } 

testajax2.php

$mysqli = new mysqli('localhost', 'root', '', 'testdb'); 
    $mysqli->set_charset("utf8"); 
    if(mysqli_connect_errno()) { 
     echo "Connection Failed: " . mysqli_connect_errno(); 
     exit(); 
    } 

    $testreceive = $_POST['test_id']; 
    $query = "SELECT First_Name from tblperson"; 
    $result = $mysqli->query($query); 
    $row = $result->fetch_all(MYSQLI_ASSOC); 

    echo json_encode($row); 

的tblperson包含50個記錄,並且只有4列。根據Firebug的說法,花了1.03s來完成這項非常簡單的任務。我不確定它的真正含義,但是通過Firebug中的Net選項卡查看,酒吧完全是紫羅蘭色。 0和1.03s等待。 + 1.03s和0接收。

編輯2:如果我將它們發送爲json_encode($row)foreach($row as $value){ echo $value['First_Name']; }也無所謂。它仍然至少約1秒。我已經嘗試過使用Chrome和Safari,儘管我無法獲得確切的持續時間,但我可以告訴大家的是相同的。但對於使用NO SQL QUERIES進行簡單的ajax調用。如果我沒記錯,速度非常快。我會回來一個樣本和持續時間輸出。

+1

我們需要更多信息,您的上下文過於模糊。你有鏈接,我們可以嘗試嗎?你同時有多少個Ajax調用?您的環境是本地還是遠程? .... –

+0

你能顯示相關的代碼嗎? –

+0

對我來說,我的設置是不正常的。本地我的ajax請求(平均來說,根據螢火蟲)在140ms內完成。但正如其他評論所說......我們不知道你的機器上發生了什麼,腳本有多複雜。 – Dale

回答

16

答:位於主機文件中添加以下行」C:\Windows\System32\drivers\etc」

127.0.0.1 localhost 

這解決了我的問題。取決於20-500ms之間的複雜程度,PHP-MySQL現在可以完成其任務。

+0

鏈接被破壞,但答案救了我!我的測試約需56秒才能運行。現在,少於2! –

+1

我在我的主機文件底部有10行以上的記錄,並且我有2秒的延遲,我不得不將行移到最上面,現在沒有延遲 – Dan

+0

謝謝!這正是我的問題! – newms87

12

它可能發生在幾個地方:1)查詢本身,或2)創建mysqli實例(和結果數據庫連接)。如果我不得不猜測,我懷疑你的問題是(2)。

一種快捷的調試方法是使用microtime()

http://www.php.net/manual/en/function.microtime.php

實施例:

$start = microtime(TRUE); // Start counting 

$mysqli = new mysqli('localhost', 'root', '', 'testdb'); 

$temp = microtime(TRUE) - $start; 
echo "Time to connect: {$temp}"; // Check elapsed time 

$mysqli->set_charset("utf8"); 
if(mysqli_connect_errno()) { 
    echo "Connection Failed: " . mysqli_connect_errno(); 
    exit(); 
} 

$temp = microtime(TRUE) - $start; 
echo "Time to setup: {$temp}"; // Check elapsed time 

$testreceive = $_POST['test_id']; 
$query = "SELECT First_Name from tblperson"; 
$result = $mysqli->query($query); 

$temp = microtime(TRUE) - $start; 
echo "Time to query: {$temp}"; // Check elapsed time 

$row = $result->fetch_all(MYSQLI_ASSOC); 

$temp = microtime(TRUE) - $start; 
echo "Time to fetch {$temp}"; // Check elapsed time 
+0

它已經解決了。但是下次你的小費可能會派上用場。請不要刪除它。謝謝。當我達到15個代表時,我會加快行動 – Wap

+0

謝謝你的代碼,但裏面有一個錯誤。在第14行中,您使用$ temp而不是$ start! – bernhardh

0

的問題是從localhost 127.0.0.1本地主機查找。

的解決方法是行127.0.0.1 localhost添加到您的Windows主機文件作爲@Wap回答了(並感謝您的回答!)

或者,如果你沒有訪問主機文件,你可以只需在您的php mysqli調用中將localhost更改爲127.0.0.1: $mysqli = new mysqli('127.0.0.1'), 'root', '', 'testdb');