за последние пару суток уже третий раз один и тот же ответ копирую используемый мной "железный" метод в чужом и непонятном коде:)
В самом начала поставьте
define('TIMESTART', microtime(true));
а потом раскидайте по коду
echo 'Метка 1 - '.round( (microtime(true) - TIMESTART), 5).' сек'.PHP_EOL;
.............
echo 'Метка 2 - '.round( (microtime(true) - TIMESTART), 5).' сек'.PHP_EOL;
и при обращении к странице у вас появиться что то типа:
Метка 1 - 0.003 сек (от начала выполнения)
Метка 2 - 4.531 сек (от начала выполнения)
Метка 3 - 4.582 сек (от начала выполнения)
из которых станет понятно что между метка 1 и метка 2 что то обрабатывалось 4.5 секунд.
Сужайте место поиска сдвигая метки, пока не найдете проблему.