2012-11-27 26 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');