(ВАЖНО) РЕДАКТИРОВАТЬ 3: Запуск testajax2.php сам по себе и НЕ AJAX. Продолжительность примерно такая же, 1,02-1,03. Итак, я думаю, это означает, что проблема в PHP-MYSQL или XAMPP ?? Когда вы запускали запрос phpmyadmin, вот результат: Показывать строки 0 – 29 (всего ~ 50, Query занял 0,0015 секунды ). Похоже, что проблема заключается не в Ajax, а, возможно, в PHP. Помогите пожалуйста … (Я также только что редактировал заголовок вопроса.)
Ответ. Добавьте следующую строку в файл hosts, расположенный в папке ”C:\Windows\System32\drivers\etc”
127.0.0.1 localhost
Вопрос до: Нормально ли для JQuery Ajax с запросами sql с другой стороны минимальная продолжительность 1 сек ? Я пробовал $.get
, $.post
, $.getjson
, $.ajax({type:'POST'})
, $.ajax({type:'GET'})
. Как я уже сказал, это минимум, это может ухудшиться примерно до 3 секунд. Я сомневаюсь, что это запросы sql, хотя, когда я пытаюсь их использовать в phpmyadmin, результаты приходят очень быстро.
Не имеет значения также, если запросы очень просты, а таблица имеет только 2 элемента, она все равно будет следовать минимальному минимуму. Я использую последний XAMPP, и я не знаю, имеет ли это значение, но я просматриваю файлы через localhost и 127.0.0.1. Благодаря!
EDIT: Спасибо за ответ, ребята. Я запускаю его в локальной среде, на том же ноутбуке я включил эти файлы. JQuery обновлен. Возвращаемое значение / array – 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,03. Я не уверен, что это на самом деле означает, но просматривая вкладку Net в Firebug, панель полностью фиолетовая. 0 и 1.03s Ожидание. + 1.03s и 0 Получение.
EDIT 2: Также не имеет значения, отправляю ли я их как json_encode($row)
или foreach($row as $value){ echo $value['First_Name']; }
foreach($row as $value){ echo $value['First_Name']; }
. Это будет по меньшей мере 1 сек. Я пробовал Chrome и Safari, и хотя я не могу иметь точную продолжительность, я могу сказать, что это примерно то же самое. Но для простого вызова ajax с NO SQL QUERIES. Если я правильно помню, это очень быстро. Я вернусь к образцу и длительности вывода.
Ответ. Добавьте следующую строку в файл hosts, расположенный в папке ”C:\Windows\System32\drivers\etc”
127.0.0.1 localhost
Это решило мою проблему. Теперь PHP-MySQL может выполнить свою задачу в зависимости от того, насколько она сложна где-то между 20-500 мс.
Это может происходить в нескольких местах: 1) сам запрос или 2) создание экземпляра mysqli (и результирующего соединения db). Если я должен был догадаться, я подозреваю, что ваша проблема (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
Проблема заключается в поиске локального хоста с localhost на 127.0.0.1.
Решение состоит в том, чтобы либо добавить строку 127.0.0.1 localhost
в ваш файл хостов Windows, как @Wap ответил (и спасибо за ответ!)
Или, если у вас нет доступа к файлу hosts, вы можете просто изменить localhost на 127.0.0.1 в вашем вызове php mysqli: $mysqli = new mysqli('127.0.0.1'), 'root', '', 'testdb');