PHP с MySQL работает медленно

(ВАЖНО) EDIT 3: запуск testajax2.php сам по себе, а не AJAX. Продолжительность примерно такая же, 1.02 - 1.03 С. Так что, я думаю, это означает, что проблема в PHP-MYSQL или XAMPP?? При выполнении запроса phpmyadmin, вот результат: отображение строк 0-29 ( ~50 total, Query took 0.0015 сек). Похоже, проблема заключается не в Ajax, а, возможно, в PHP. Помогите пожалуйста... (Я просто отредактировал вопрос заглавие:.)

ответ: добавьте следующую строку в файл hosts, расположенный в ”C:WindowsSystem32driversetc”

   127.0.0.1 localhost



вопрос: Нормально ли для jQuery Ajax с sql-запросами на другой стороне иметь минимальная продолжительность 1 сек? Я пытался $.get, $.post,$.getjson,$.ajax({type:'POST'}), $.ajax({type:'GET'}). Как я уже сказал, это минимум,он может ухудшиться примерно до 3 секунд. Я сомневаюсь, что это SQL-запросы, как и когда я пробую их в phpmyadmin, результаты приходят очень быстро.

не имеет значения также, если запросы очень просты, и таблица имеет только 2 элемента, она все равно будет следовать минимуму 1 сек. Я использую последний XAMPP, и я не знаю, имеет ли это значение, но я получаю доступ к файлам через localhost и 127.0.0.1. Спасибо!

EDIT: Спасибо за ответ, ребята. Я запускаю его в локальной среде, на том же ноутбуке, на котором я сделал эти файлы. JQuery-это обновленная. Этот возвращаемое значение / массив json_encoded. Я использую mysqli. База данных находится в InnoDB, а внутри всего около 5 таблиц, и на них почти ничего нет. Вот очень простой пример запроса:

.в 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 tab в Firebug, бар полностью фиолетовый. 0 и 1.03, очень жду. +1.03 S и 0 прием.

EDIT 2: также не имеет значения, отправляю ли я их как json_encode($row) или foreach($row as $value){ echo $value['First_Name']; }. Это все равно будет около 1 секунды. Я пробовал Chrome и Safari, и хотя у меня нет точной продолжительности, я могу сказать, что это примерно то же самое. Но для простого вызова ajax без SQL-запросов. Если я правильно помню, это очень быстро. Я бы вернулся с образцом и продолжительностью. выход.

3 ответов


ответ: добавьте следующую строку в файл hosts, расположенный в ”C:\Windows\System32\drivers\etc”

   127.0.0.1 localhost

это решило мою проблему. PHP-MySQL теперь может выполнить свою задачу в зависимости от того, насколько сложно где-то между 20-500ms.


это может происходить в нескольких местах: 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 от 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');