Я предполагаю, что вы получаете время отклика (800 мс - 2,5 с, которое вы упомянули) через FireBug?Если это так, то это время самого запроса.В этот момент весь ваш JS-сайт для разработчиков уже выполнен, и единственный JS, который работает, - это код jQuery в функции ajax()
.
Так что я думаю, вы можете быть достаточно уверены, что это ваш PHP-код.
Я бы использовал вызовы php microtime()
и напрямую нажал на этот скрипт (из браузера или командной строки, а не через вызов ajax) и распечатал результат микротайма.
В частности, вы бы добавили это в начало вашего скрипта:
$start = microtime(true);
И это в конце:
echo "Time: " . (microtime(true) - $start);
Затем попытайтесь выделить то, чтопараметры / etc используются во время любых медленных запросов.Как и в большинстве случаев с приложениями CRUD, БД чаще всего является виновником.
Редактировать:
После более внимательного изучения вашего кода, нет ничего явно неправильного.Что мне интересно, так это то, что это единственный запрос с таким сумасшедшим временем ответа.Если это так, это говорит о том, что связь между вашим клиентом и сервером не является проблемой.Вот именно этот сценарий.
И выполнив то, что я упомянул выше - нажав скрипт непосредственно через браузер, а не вызов ajax, - вы можете изолировать код PHP, а затем, перемещая расположение этих операторов microtime, изолировать конкретныестроки кода.
Но если бы это был я, я бы сначала сосредоточился на этом SQL-запросе.Скорее всего, вы не используете никакого кэширования байт-кода, как APC.Это отличный инструмент, который сейчас не так широко используется.
Таким образом, единственный механизм кэширования, который использует код, это, вероятно, MySQL Query Cache.Если в поле subcatid нет индекса, возможно, MySQL выполняет сканирование таблицы.Но в следующий раз, когда вы запросите тот же самый запрос (с тем же значением подстроки), результаты будут в кеше запросов, и MySQL вернет их немедленно.
Вы можете проверить это, изолировав еще больше: забудьте код AJAX и PHP-код, просто скопируйте и вставьте этот запрос, вставьте некоторые допустимые значения подстроки и запустите его непосредственно вphpMyAdmin или MySQL CLI или ваш любимый инструмент MySQL.Если вы видите прерывистую производительность, когда вы подключаете новые и другие значения субкатода, то вы знаете, в чем заключается ваша проблема.