Класс
расширенной отладки v.7 для InstantCMS 2.1
Мощный, но лёгкий класс для
расширенной отладки. Позволяет легко, наглядно и управляемо получить информацию
о времени выполнения и о других параметрах php-скриптов
CMS и их частей.
Данная отладка будет полезна
как при тестировании и оптимизации самой CMS, так и разработчикам компонентов.
А так же всем пользователям CMS для выявления проблем при размещении сайтов на
реальных серверах, где невозможно использовать встроенную в IDE систему
отладки.
Например, с её помощью
прямо на реальном работающем или на локальном тестовом сайте можно увидеть
«тяжёлые» или ошибочные запросы, повторяющиеся подключения файлов,
неоптимизированные участки кода, «задумчивые» хуки и виджеты и т.д. Можно
быстрее понять какой из добавленных на сайт компонентов тормозит генерацию
страниц и почему именно. Администраторы прямо из админки увидят «тонкие места»
сервера – что именно вызывает тормоза: процессор, диски или база данных; смогут
оптимальнее подобрать объём ОЗУ для php и т.п. Программисты
смогут точнее понять работу CMS, посмотрев на неё «изнутри» и быстрее,
нагляднее отладить свои компоненты или шаблоны. Можно отследить возникновение
критических ошибок PHP и выдавать пользователям страницу с текстом вместо
сообщений об ошибках. И многое другое.
Настраиваемые логи отладки выводятся
прямо под подвалом страницы, не изменяя саму страницу. Во многих случаях их
очень удобно использовать для анализа проблем у пользователей CMS и компонентов.
Достаточно попросить админа сайта включить вывод нужных операций в лог на
проблемной странице и потом прислать этот лог в поддержку или выложить на
форум. Также можно попросить вписать в текст нужного скрипта контрольную точку
с выводом интересующей инфы
(например, состояние переменных) и получить ещё более точное понимание
происходящего. Эти возможности будут полезны и разработчикам системы, и
сторонним программистам при поддержке их компонентов.
Возможности более подробно:
• Подсчёт параметров времени выполнения по
категориям:
-
Время выполнения всего скрипта
-
Время выполнения кода PHP, с отдельным подсчётом количества и времени инклудов, автозагрузок классов, хуков,
виджетов, времени работы контроллера и рендеринга
страницы.
-
Время, затраченное на выполнение подключений и запросов к БД, а также их
количество.
-
Количество обращений к кэшу и время его
работы отдельно по типам запросов SET и GET.
-
Минимальное, максимальное и конечное использование памяти скриптом в двух
режимах: реальное (блочное) выделение памяти для PHP и точный побайтовый подсчёт.
Все расчётные значения
выводятся в одну наглядную итоговую таблицу.
• Перехватываются ошибки PHP. Есть возможность
уведомления админа о критических ошибках по почте, личным сообщением или системным
уведомлением на сайте. Есть возможность спрятать от пользователей описания
возникших ошибок, заменив их желаемым текстом.
• Собирается и выводится в лог подробная информация
по всем операциям в категориях:
- Автозагрузки классов и инклуды файлов.
- События.
- Хуки.
- Виджеты.
- Операции с БД.
- Операции с кэшем.
• Два фильтра лога SQL-запросов: по части SQL-строки
и по вызвавшему запрос файлу/классу/функции. Они, например, позволяют выводить
в лог лишь запросы из нужного класса или файла. Или только запросы к
интересующей таблице.
• Два фильтра лога автозагрузок классов: по имени
подключаемого файла и по вызвавшему подключение файлу/классу/функции. Позволяют
посмотреть в логе только автозагрузки нужного файла. Или все автозагрузки из
указанного файла/класса/функции.
• Два фильтра лога инклудов: по имени подключаемого
файла и по вызвавшему подключение файлу/классу/функции. Позволяют посмотреть в
логе только попытки подключения нужного файла. Или все подключения из
указанного файла/класса/функции.
• Два фильтра лога событий/хуков: по имени события и
по обрабатывающему контроллеру. Позволяют посмотреть в логе все обработки
только одного выбранного события. Или все события, обрабатываемые указанным
контроллером.
• Два фильтра лога виджетов: по имени виджета и по его
контроллеру. Позволяют посмотреть в логе все обработки только одного выбранного
виджета. Или все виджеты указанного контроллера.
• Для наглядности все используемые фильтры логов
отображаются в специальной таблице перед логами.
• Подсветка цветом «тяжёлых» SQL-запросов, хуков и
виджетов в логах для быстрого поиска причин тормозов на сайте.
• Возможность в любое место любого php-файла
вставлять неограниченное количество контрольных точек (КТ).
В каждой точке выводится
информация о действиях скрипта и изменениях с момента предыдущей КТ (или с
начала скрипта, если до этого точек установлено не было) :
-
название точки (задаётся вручную по желанию),
-
время выполнения,
-
информация о количестве и времени обращений к БД/кэшу и инклудах, состояние и
изменение памяти.
В КТ можно выводить в
отладочный лог значения любых переменных и другие параметры работы скрипта.
Вызов КТ осуществляется
вставкой в текст программы вызова одной функции с
параметрами или без них. То есть, очень легко и удобно.
Для более наглядного учёта
КТ их количество также отображается в итоговой таблице с параметрами времени
выполнения скрипта. Это позволяет легче найти и удалить КТ перед размещением на
сервер.
• Есть возможность выводить лог с подробностями по
любым операциям, учитываемым классом отладки, в любом сочетании типов операций.
Туда же выводится и информация по контрольным точкам. Все операции выводятся в
лог в той же последовательности, в которой выполняются в скрипте, одна за
другой. Таким образом, можно отследить ход выполнения программы.
• Для тех типов операций, где это доступно и имеет
смысл, выводятся входные данные и результаты работы этих операций. Ошибки и
предупреждения выделяются цветом.
• Для инклудов собирается и выводится в отдельной
таблице список ошибочных инклудов и тех, которые скрипт пытался подключить 2 и
более раз.
• Опциональный вывод в отдельную таблицу списка
произошедших на странице событий, всех зарегистрированных хуков или всех
контроллеров. А также таблицы обрабатываемых контроллерами хуков с группировкой
по хукам или по контроллерам с подсчётом суммарного количества сработавших
хуков и времени их работы.
• Отдельная таблица виджетов на странице с
количеством вызовов и с суммарным и средним временем выполнения для каждого.
• Для всех контролируемых операций и КТ в лог
автоматически выводится место вызова (файл/строка/класс/функция). Дополнительно
можно включить вывод стека вызовов (трассировку вызовов) для любых
отслеживаемых операций или КТ на любую заданную глубину, независимо для каждого
типа операций и для каждой КТ отдельно.
• Настраиваемая функция «Имитировать сетевые задержки»
с возможностью задавать длительность «лага» в миллисекундах.
• Дополнительно считается и в итоговой таблице отображается
время, затраченное классом на сбор и обработку отладочной информации. А так же время
работы скрипта за вычетом времени работы класса отладки и «имитации сетевых
задержек». Там же показывается информация об использованном классом отладки
объёме памяти.
• Вся выводимая в таблицы и в логи информация для
удобства восприятия и наглядности выделяется разным цветовым оформлением.
• Есть возможность с помощью КТ включать и выключать
вывод логов обращений к БД, инклудов и работы с кэшем для любых участков кода.
То есть, можно, например, посмотреть не все SQL-запросы или инклуды, а только те, которые происходят
между двумя КТ. Или можно выводить все обращения к БД и/или файлам, за
исключением проверенных участков скрипта.
• В КТ и вообще в любом месте любого скрипта можно посмотреть
текущие значения любых параметров работы скрипта из свойств класса
отладки (те параметры, которые показываются в итоговой таблице, только их
значения не на момент окончания работы, а на текущий момент).
• Информацию отладки можно показывать только
администраторам или всем пользователям. Это удобно при анализе проблем на
работающем сайте.
• В отличие от использования echo, информация о времени выполнения
и лог сначала собираются в памяти класса, а только по окончании работы скрипта
выводится под созданной страницей, не меняя её внешний вид.
• Настройки отладки вынесены в отдельный
конфигурационный файл, который загружается первым при старте CMS. Загрузка и
инициализация класса занимает несколько миллисекунд, что при отладке не влияет
на время работы всего скрипта в целом.
• Отладка довольно экономно расходует память – всего
11 килобайт при минимальных настройках. Максимальный объём зависит от
включённых опций логов.
• При отключении отладки она вообще не загружается в
память и никаких обращений к ней не происходит. Выполняется лишь загрузка
одного маленького файла конфига и проверка одной глобальной константы во всех
местах вызова отладки. Следовательно, работа скрипта практически не
замедляется.
• Управление включением/отключением и параметрами
отладки производится через новую вкладку «Отладка» в админке. Там же перед
настройками в наглядном виде показываются текущие параметры отладки. Для
удобства блоки опций в настройках сделаны в виде тематических вкладок.
• При включённой «Отладке» на каждой странице админки
выводится предупреждение об этом.
• Текстовые строки из настроек в админке вынесены в
языковые файлы - обеспечена совместимость с любыми языками, которые будут
добавляться в будущем.
• Оформление всех выводимых данных производится с
помощью отдельного css-файла,
хранящегося в теме. Таким образом, вывод отладки можно настроить под любую свою
тему.
Стандартная встроенная
отладка оставлена без изменений. Только отключена функция «Имитировать сетевые
задержки», так как более настраиваемый вариант этой функции включён в
расширенную отладку.
Дополнительно добавлен
вывод сообщения «Параметры сохранены» при успешном сохранении параметров сайта
в админке.
Этот вариант отладки разработан
для релиза InstantCMS 2.1.
Достаточно просто
распаковать содержимое архива с заменой файлов в папку с уже установленной
системой и включить отладку в новом
разделе "Отладка" в "Настройках" админки.
Надеюсь, этот класс отладки
поможет вам более глубоко понять и протестировать новый Инстант
2.0, а также быстрее и проще разработать для него
новые компоненты.