Отладка кода через бэктрейс — debug_backtrace()

Возникла ситуация, при которой метод get_term вызывался 20 000 раз. Причем даже на чистой установке WP. Базовая причина была ясна — у нас было 60 постов на странице и у каждого поста около 1000 категорий. Что конечно не очень правильно, но имели то что имели.

Как выяснить почему get_term() вызывается 20 000 раз? Просто поиском по коду и методом тыка? Там очень много мест.

xdebug — к сожалению не стоит.

Хорошее решение нашлось тут: https://stackoverflow.com/questions/8369275/how-can-i-save-a-php-backtrace-to-the-error-log

error_log(print_r(debug_backtrace(), true));

Запись бэктрейса в лог.

В wp-config задали счетчтик: $GLOBALS[‘i’] = 0;

Затем в функции get_term() поставили плюсы $GLOBALS[‘i’]++ и условие на 10000 итерации вызвать бэктрейс.

Так стало ясно кто и зачем вызывал этот метод.

Нашли нужный хук, который позволял оптимизировать код и убрать лишние запросы и потери  времени.

пример бэктрейса в error_log

Источник: https://wpcraft.ru/2018/otladka-koda-cherez-bektrejs-debug_backtrace/

Добавить комментарий

%d такие блоггеры, как: