Отладка кода через бэктрейс — 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/

Анатолий Юмашев

Настоящий шаман, планирует жить до 150 лет. Родом из Тюмени, жил в Санкт-Петербурге, Москве и землянке (по его словам). Думает, что знает WordPress лучше всех в мире, кроме еще 10 человек. Делает всякие безумные вещи, которые иногда даже работают. Может зарядить или полностью отнять энергию у 50 человек. Один из ярких участников российского WordPress сообщества, а также создатель самого продаваемого и обсуждаемого плагина для синхронизации Woocommerce и МойСклад. Умеет исчезать сквозь землю. Любит WordPress, кальян, сигары и Льва Толстого. Может жить и работать вообще без еды. Делает сайты от 10 млн рублей.

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

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