Работа скриптов php на localhost 1 секунда, через глобальный ip - 6 секунд.

VVWind

Новичок
С чем может быть это связано? Честно, я не разбираюсь в сетях, пропускной способности, настройках сети и доступа к глобе.

Скрипты сложные, часто подгружаются страницы со скриптами с помощью jquery.
Но если работать с localhost, отображается за 1 секунду примерно 1000 записей в таблице с 6 ячейками и подобная информация.
С глобы 6 секунд.

Как может различаться именно скорость выполнения через глобальный айпи к компьютеру, который все равно ведь обращается к странице, которая работает на апаче?

Но я делал проверял. 1 и 6 секунд. Разница большая!

Кто-нибудь сталкивался с подобным?
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
Конечно, все сталкивались. Надо оптимизировать работу скрипта, ну и 1000 записей в таблице вам собственно нафига?
 

VVWind

Новичок
Проект такой, веб-приложение наподобие 1с. В этом случае jquery подгружает страницу loadNames.php (в спец. подготовленный <div>) в которой происходит цикл по возвращенному массиву из mysql_query. В цикле происходит это:

PHP:
    while ($infoDebt = mysql_fetch_array($requestDebts)) {
        #Тут идет очищение переменной для отображения имени
        $nameVar = "";
        #Здесь идет запрос айди должника и информация должника
        $debter_id = $infoDebt['debter_id'];
        $requestDebter = mysql_query("select * from debters where id=".$debter_id) or die(mysql_error());
        $infoDebter = mysql_fetch_array($requestDebter);
        #Здесь идет запрос инфы маркера
        $marker_id = $infoDebt['marker_id'];
        $requestMarker = mysql_query("select * from markers where id=".$marker_id) or die(mysql_error());
        $infoMarker = mysql_fetch_array($requestMarker);
        #Здесь идет запрос инфы контакта
        $requestContact = mysql_query("select * from contacts where id=".$infoDebter['contacts_id']) or die(mysql_error());
        $infoContact = mysql_fetch_array($requestContact);
        #Здесь идет запрос инфы сотрудника
        $employee_id = $infoDebt['employee_id'];
        $requestEmployee = mysql_query("select * from employees where id=".$employee_id) or die(mysql_error());
        $infoEmployee = mysql_fetch_array($requestEmployee); 
        $initials = $infoEmployee['surname']." ";
        $initials .= mb_substr(trim($infoEmployee['name']), 0,1, "UTF-8").". ";
        $initials .= mb_substr(trim($infoEmployee['patronymic']), 0,1, "UTF-8").".";
        $nameVar .= "<tr style='-moz-user-select: -moz-none;
  -o-user-select: none;
  -khtml-user-select: none;
  -webkit-user-select: none;
  user-select: none; cursor: default' ondblclick='Show.Debt(".$infoDebt['id'].")' onclick='selectName($(this))' data-type='nameitem' name = ".$infoDebt['id'].">";
        $nameVar .= "<td>".$infoDebter['surname']." ".$infoDebter['name']." ".$infoDebter['patronymic']."</td><td>".$infoContact['city']."</td><td>".$infoContact['street']."</td><td>".$infoDebt['debt']."</td><td style='background-color: ".$infoMarker['color']."'>".$infoMarker['name']."</td><td style=''>".$initials."</td>";
        $nameVar .="</tr>";
        echo ($nameVar);
    }
Честно, признаюсь, мое первое серьезное веб приложение, все в первый раз, и отображение и выделение с jquery и т.д., поэтому с оптимизацией - минимум.
Единственное, что я уяснил пока что - вместо echo(кусок полного чего-то) надо сначала все в переменную добавлять а после уже делать echo(переменная).
В этом скрипте сильно все загружено?
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
У тебя идет куча запросов в цикле, что не есть хорошо, подозреваю, что там еще и индексов нет на полях.

Вообще можно было все запросы в цикле не выполнять
 

VVWind

Новичок
Вариант сначала создать цикл запросов, которые сохраняют просто всю инфу в массиве а после в этом цикле работать с массивом и echo - облегчит скрипт?
Насчет индексов, я даже не знаю что это :(
Я в mysql даже связей между ключами еще не сделал, хотя приложение уже работает с >5 тысячами долгов. Скорее надо делать, потому что когда дойдет надобность до удаления долгов, без связей в базе данных куча мусора останется ненужного.
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
Слово было об индексах, а не связях. По полю id должен был быть индекс.

Цикл запросов не надо делать, надо собрать массив ID и сделать один запрос по ним. select * from debters where id IN ()... А вообще есть еще такое дело как JOIN в мускуле.
 

VVWind

Новичок
id с auto_increment есть. Получается лучше всего сначала получить все id debts а после по ним уже с join собрать всю информацию в массив и ее в цикле отобразить, да?
 
Сверху