Вчера я написал про допил напильником модуля отладки Debug database queries for Opencart. Изменения очень простые, но сначала о проблеме.
А проблема в том, что модуль выводит кучу SQL запросов с возможностью их сортировки по времени исполнения или по порядку исполнения. Это, конечно, круто, но если я собираюсь оптимизировать и кэшировать запросы, мне нужно знать кто их вызывает.
Как узнать строку в которой произошёл вызов к $DB ?
PHP предоставляет такую возможность благодаря функции debug_backtrace. Она позволяет собрать стек вызовов для метода, с указанием файла и строки. Мне потребовалось сделать ещё сортировку по месту вызова, что бы быстрее определить места особенно нуждающиеся в кэшировании. Для этого добавил новое поле в вывод отладчика [ by line ]
и дописал обработчик события. Группировку по строке сделал с помощью JS-функции localeCompare(). Конечно, получило не в алфавитном порядке, и иногда вызовы из одного файла могут быть перемешаны с вызовыми из другого файла. Но все вызовы из одной строки одного файла всегда будут рядом. Это позволяет быстро оценить, сколько раз осуществлялся конкретный вызов к БД.
На сладкое добавил вывод memory_get_peak_usage для определения максимального выделения памяти под выполнение скрипта.
Патч для модуля отладки
Для debug_backtrace я сформировал патч и отослал мейнтейнеру модуля. Посмотрим, что он ответит, на всякий случай сделал копию модуля на github.
UPD. open4dev обещал внести правки в релиз =)