Очень медленная загрузка AJAX-контента в админке (ожидание ответа сервера до 30 сек)

Основная страница админки загружается быстро, но контент, подгружаемый через AJAX (например, поставщики в товарах, отдельные вкладки и т.п.), загружается крайне медленно.

Каждый AJAX-запрос может ждать ответа от сервера до ~30 секунд, после чего отправляется следующий. В результате любые действия в админке превращаются в ожидание, пока выбранный вариант применится.

Проблема выглядит как серверное ожидание, а не как работа JS на клиенте.

Что уже пробовал:

  • сайт был на XAMPP (Apache),
  • переносил на другой Apache (lagoran),
  • пробовал запускать в WSL + XAMPP,
    — прироста скорости нет.

Также пробовал поднимать старый бэкап проекта, сделанный в период, когда проблем не было — там наблюдается такое же медленное выполнение AJAX-запросов.

Поэтому предполагаю, что проблема не связана с кодом проекта или конкретными доработками.

Подскажите, пожалуйста:

  • в какую сторону копать в первую очередь,
  • какие настройки CS-Cart / PHP / MySQL могут вызывать такую задержку,
  • как уменьшить время ожидания AJAX-скриптов, чтобы админка работала быстрее.

В первую очередь поставьте лог медленных запросов в mysql, попросите поддержку поставить логирование от 10 секунд, потом от 5 и в целом будет ясно, что у вас тормозит.

такая же проблема началась и у меня сегодня утром, домашняя страница быстро грузится а вот другие жестко тупят, при нажатии на шестеренку секции или блока кидает в самый низ и тишина… спустя 20-30 сек открывается. Вчера было норм, пришло вот это, связанно ли с этим хз, возможно опять менеджер модулей тупит. Страница открывается быстро, но вот вкладка в браузере крутит и пока она не остановится ничего не реагирует.

Проблема не нова… Здесь много факторов… Но в каждом случае свои нюансы…
Но есть главных 3 варианта…

  1. Разнести все базы данных по разным серверам.
  2. Ждать у моря погоды.
  3. Сменить движок.

Либо следовать нынешнему корпоративному стандарту: All operators are currently busy. Please call back later or wait. We value our customers.

Включал slow query log в MySQL (порог 10 сек, затем 5 сек) — в момент зависаний лог пуст, запросы туда не попадают.

При этом:

  • HTML-страницы отдаются быстро;
  • AJAX-запросы в админке ждут ответа 20–30 секунд;
  • после ответа выполнение сразу продолжается.

По ощущениям, это не медленные SQL-запросы, а ожидание / блокировка до начала выполнения PHP-кода.

Это наводит на мысль, что причина не в коде проекта и не в данных, а в особенностях локального окружения (PHP sessions, file locking, файловая система, Apache).

Буду благодарен за подсказки, какие именно настройки локального окружения CS-Cart и/или Apache чаще всего приводят к таким задержкам и с чего лучше начать проверку.

Если ajax не post’ом отправляется, попробуйте url запроса просто в новой вкладке открыть. Тоже долго грузиться будет?

Попробовал открыть AJAX-URL напрямую в браузере — GET-запрос тоже грузится ~33 секунды.

Для исключения влияния логики CS-Cart создал простой mode в контроллере со следующим кодом:

Спойлер

echo “start\n”;
flush();
sleep(1);
echo “done\n”;

Сам код выполняется мгновенно (sleep = 1 сек), но ответ клиенту приходит только через ~33 секунды.

При этом:

  • HTML-страницы отдаются быстро;
  • при открытии карточки товара выполняется несколько AJAX GET-запросов подряд;
  • каждый из них ждёт ответа примерно те же ~33 секунды.

Из этого следует, что задержка возникает до выполнения PHP-кода, и проблема связана именно с обработкой GET-запросов (ожидание соединения / окружение), а не с SQL или логикой CS-Cart.

Буду благодарен за идеи, в каком направлении дальше копать (Apache / PHP-FPM / DNS / IPv6 / sessions).

возможно это

Посмотрел модули AlexBranding — получил то же сообщение о блокировке лицензии, что и в указанной теме.

Мысль о влиянии блокировок РКН выглядит правдоподобно, однако хочу уточнить важный момент:

:small_blue_diamond: у меня локальная dev-копия проекта работает под Apache (WSL, Ubuntu) — и именно там наблюдаются стабильные зависания GET-запросов ~33 секунды;
:small_blue_diamond: при этом рабочий сайт на удалённом сервере с Nginx — без каких-либо тормозов, админка и модули AB открываются мгновенно.

Это наводит на мысль, что проблема может быть не столько в самих блокировках, сколько в том, как Apache в локальном окружении обрабатывает сетевые таймауты / недоступные внешние хосты, в отличие от Nginx.

Буду благодарен за идеи, какие именно настройки Apache / PHP / сетевого стека (DNS, IPv6, proxy, resolver) могут позволить добиться поведения, близкого к Nginx, чтобы локальная среда не «висела» на таких запросах.

Поднять Nginx локально, к сожалению, не вариант — пробовал под WSL, получал нестабильную работу вплоть до BSOD.

у AB модули не могут работать локально вроде бы, там есть проверка лицензии.
Возможно в этом проблема.

Ну есть проверка лицензий… неужели непонятно, что есть политическое составляющее… вопрос решения… а вот тут 0…

Заблокировал адреса alexbranding в hosts и все полетело, скорость локального сайта приблизилась к скорости прода практически вплотную, большое спасибо

1 лайк

Всё верно. В модуле ab__addons_manager
в файле /addons/ab__addons_manager/Tygh/ABAManager.php
есть функция exec_cmd
там курлом делается запрос к https://cs-cart.alexbranding.com/api2/
на проверку лицензий.
Там просто надо сделать “имитацию” корректного ответа и всё будет работать.

1 лайк