«Расширенная отладка» для InstantCMS 2.3.0 (v.10) + оптимизация скорости

+10
2.54K
Десятая, юбилейная версия. Очень много доработок и изменений. Пока описывал использование «Расширенной отладки», в голову приходили мысли и идеи. Вот результат их воплощения.
Иллюстрация

Если вы не знакомы с «Расширенной отладкой», то можете почитать «Описание её возможностей».

Доработки и изменения в этой версии:
+ Добавил параметры инициализации шаблона в основную таблицу и в лог.
+ Добавил вывод в лог моментов старта виджетов, контроллера и шаблона. Трассировку виджетов перенёс в лог их старта.
+ В логе завершения работы контроллера теперь выводится имя этого контроллера.
+ В логе рендеринга теперь выводится имя шаблона и при старте, и при окончании работы.
+ Добавил вывод информации о событиях и хуках в логе виджетов.
+ В логе виджетов добавил подсчёт и вывод времени получения данных и рендеринга виджетов, а также сообщение о том, производился ли рендеринг виджета.
+ В логе БД добавил вывод результатов SQL-запросов.
+ Добавил в лог событий и хуков опциональный вывод данных этих событий.
+ Добавил в лог операций с кэшем опциональный вывод данных и результатов этих операций.
+ В контрольных точках добавил вывод пикового значения памяти.
+ Во все логи добавил вывод текущего времени скрипта (времени, прошедшего с момента старта скрипта).
+ В основную таблицу добавил значение 'script peak' (пик памяти скрипта за вычетом отладки) и поставил его на первое место.
+ Расширил фильтры для запросов к БД, автозагрузок и инклудов. Теперь фильтр по запрашивающему файлу ищет по трассировке на глубину, заданную в настройках трассировки для этого лога.
+ Добавил фильтр событий/хуков по пути/имени вызывающего файла или класса/функции.
+ Добавил фильтр обращений к кэшу по типу: все/set/get.
+ Добавил фильтр обращений к кэшу по имени ключа.
+ Добавил фильтр обращений к кэшу по пути/имени вызывающего файла или класса/функции.
+ Добавил вывод данных при обращениях к кэшу.
+ Добавил подсчёт отфильтрованных строк лога и вывод их в таблицу фильтров.
+ Добавил подсветку найденного в текстах SQL-запросов и трассировках при использовании фильтров.
+ Добавил подсчёт SQL-запросов с ошибками и предупреждениями (раздельно) и вывод информации об этом в основной таблице в блоке "SQL queries".
+ Полностью переделал вывод параметров, данных и результатов. Более компактный и читабельный вид, добавлены типы значений и подсветка индексов/типов/значений.
+ Добавил подсветку синтаксиса SQL-запросов.
+ Добавил выбор уровня перехвата ошибок PHP (по настройкам сервера или строгий).
+ Добавил подсказки к параметрам соединения с БД в логах.
+ Добавил подсказки к значениям памяти в логах.
+ В верхнем правом углу блока "Текущие параметры отладки" на странице настройки "Отладки" в Админке теперь пишется версия "Отладки".
— Исправил ошибку неправильного расчёта начальной памяти скрипта и памяти отладки.
— Исправил ошибку, при которой не выводились автозагрузки и инклуды, если искомая построка находилась в начале пути к файлу.
* Загрузка языковых констант теперь происходит только при загрузке Админки.
* Изменил отправку уведомлений о критических ошибках на почту. Теперь почта берётся не из профиля пользователя, а из настроек отладки в Админке.
* Удалил из основной таблицы неинформативное значение 'memory_used' (использованная память).
* Сделал более компактный и аккуратный вывод текстов SQL-запросов и перенос длинных данных/результатов.
* Подправил формулировки всплывающих подсказок в меру знания мной и Гугл-транслейтом английского языка.
* Чуток подправил css-стили для более наглядного выделения информации.
* Переписал строки на использование одинарных кавычек.
* Подправил некоторые моменты стиля кода до стандартов Инстанта.

Ещё изменил название с «Класс расширенной отладки» на «Расширенная отладка». Так будет правильнее – это не просто класс, а готовая система.

Теперь о некоторых изменениях чуть подробнее.

Добавил параметры инициализации шаблона

Теперь в суммарной таблице «Отладки» больше нет пустых мест. 😊
Работа с шаблоном в InstantCMS 2 состоит из двух больших этапов. Сначала происходит его загрузка и инициализация с использованием его настроек. А после окончания подготовки данных происходит заполнение шаблона и его вывод на страницу (рендеринг). В версии 9.1 регистрировалась только вторая часть. Теперь фиксируется всё.

Добавил вывод в лог моментов старта виджетов, контроллера и шаблона

В этой версии я разделил в логе строки о виджетах, контроллере и шаблоне на две строки: момент старта и окончания обработки. Для наглядности перенёс трассировку виджетов в лог их старта.
Иллюстрация

Добавил более широкий вывод информации о КТ и операциях

Теперь в зависимости от типа лога выводятся: текущее время с момента старта скрипта, количество и время запросов к БД, автозагрузок/инклудов, событий/хуков, состояние памяти. Например, для КТ вот так:

Иллюстрация

В логе БД добавил вывод результатов SQL-запросов

Иллюстрация

Добавил в лог событий и хуков опциональный вывод данных этих событий

Иллюстрация

Добавил в лог операций с кэшем опциональный вывод данных и результатов этих операций

Иллюстрация

В основную таблицу добавил значение 'script peak'

В стандартной отладке и в предыдущих версиях расширенной основной цифрой использования памяти скриптом была разность между памятью на момент остановки работы скрипта и стартовым значением. Это не совсем корректно. Так как в реальности скрипт практически всегда использует памяти больше, что видно по более высокому пиковому значению памяти. Поэтому начиная с этой версии основной цифрой использования памяти скриптом будет разница между пиком и стартом.

Расширил фильтры ...

Везде, где это имело смысл, сделал максимум фильтров для эффективной выборке по логам. У каждого типа операций свой набор фильтров.
В таблице применённых фильтров теперь для каждого фильтра подсчитывается количество найденных строк. А в логах для полной наглядности найденные подстроки выделяются зелёным цветом.
Иллюстрация
Иллюстрация

Полностью переделал вывод параметров, данных и результатов

До этой версии вывод параметров, данных и результатов оформлялся функцией PHP print_r. Это было простое решение. Но не настолько наглядное, как мне бы хотелось. Поэтому я немного подумал и написал специальную функцию для обработки вывода функции var_dump. Получилось намного нагляднее и в цвете. Такое оформление занимает чуть больше времени, но за наглядность можно заплатить десятком-другим миллисекунд.
Спасибо • Mike • за помощь с регулярками!

Добавил подсветку синтаксиса SQL-запросов

Сначала сделал подсветку с использованием класса "GeSHi", появившемся в InstantCMS 2.3.0, добавив к нему файл описания подсветки для MySQL. Получилось красиво, но очень тормознуто. Подсветка 50 запросов на главной странице демо занимала в три раза больше времени, чем создание всей страницы. Жесть...
Поэтому написал свою небольшую функцию. Она «знает» все основные операторы и операции (хотя и чуть меньше, чем "GeSHi", но на демо подсвечивает всё во всех запросах, которые я смотрел), выделяет строки и цифры. Получилось ещё красивее и в десять раз быстрее. Не идеал, конечно, но для большинства запросов – самое оно.
Иллюстрация

Добавил выбор уровня перехвата ошибок PHP

Раньше в «Расширенной отладке» был только один уровень перехвата ошибок – максимальный. Это приводило к тому, что в логах веб-сервера фиксировались любые, даже самые мелкие предупреждения и примечания. На работающем сайте это избыточно. Поэтому я добавил галку «Включить строгий режим перехвата ошибок для точной отладки», которая включает уровень (E_ALL | E_STRICT). Если эта галка выключена, то перехват ошибок работает по настройкам веб-сервера.


Скачать полную установку и обновление можно в Каталоге.


Также можете скачать и почитать обновлённую инструкцию:
Подробное описание выводимых значений, настроек отладки в Админке и использования точек отладки (htm-файл в архиве)

Спасибо всем за комментарии и оценки. Отдельное спасибо Олег Васильевич я за поддержку! Мне очень приятно осознавать, что мой труд кому-то нужен и полезен.
Олег Васильевич я Олег Васильевич я 8 лет назад #
Комментарий удален
+1
WebMan WebMan 8 лет назад #
laugh Закрученно, но интересно. Походу, я явно не в этой "тройке" посоветовавшихся и постановивших. Но готов поддержать оригинальную (а, главное, приятную для меня) рекламную идею. Интересно, чем она закончится... joke
0
Alekseinet Alekseinet 8 лет назад #
Наблюдать за происходящим и понимать что твориться с сайтом всегда полезно... Я пока не понимаю в этом дополнении ничего smile
Буду разбираться изучать как этим пользоваться.. Но это 1000% что очень реально нужная топовая вещь, так как по другому понять что происходит с сайтом можно только через шамана с бубном =))))
Web Man я не знаю сколько нужно иметь сил и знаний чтобы это все сделать.. скажу так я бы устал описывать Ваше дополнение =))
Для благодарностей нужно где-то указать все возможные кошельки...
Я не за шаблоном пришел не думайте =)
Всех с наступающим!
0
WebMan WebMan 8 лет назад #
Давайте так. Насчёт благодарностей - идея не моя. Но мне, естественно, нравится. joke За неё от меня ещё одно спасибо получает Олег Васильевич я. Я делал эту "Отладку" не ради донейта. Я и сам ей пользуюсь. И надеюсь, что она будет полезна сообществу. Но, конечно, мне ваша поддержка будет приятна и покажет, что мои труды кому-то нужны. Обращайтесь в личку, отправлю кошельки Вебмани. А насчёт шаблонов - это бонус, который будет разруливать Олег Васильевич я. Обещаю передать ему список всех поддержавших.

Единственно, если уж Олег Васильевич я устраивает конкурс, то будет правильно установить какие-то достаточные сроки, после которых будут подведены итоги и розданы призы. И какие-то правила. Например, как поступит владелец призов, если будут два победителя с одинаковыми суммами. Отдаст каждому по шаблону? Или ...? Ждём от него дополнительной информации по этим вопросам.
Олег Васильевич я Олег Васильевич я 8 лет назад #
Комментарий удален
Олег Васильевич я Олег Васильевич я 8 лет назад #
Комментарий удален
+1
WebMan WebMan 8 лет назад #
Олег Васильевич я, я тут думал, как Вас поблагодарить за Вашу внутреннюю доброту. Скажу "спасибо" делом. smile
Покажу, чем Вам, как разработчику шаблонов, может быть полезна "Отладка". Пару примеров. Совсем простой и просто простой. laugh

Предположим, Вы дорабатываете шаблон для виджета категорий контента. И хотите понимать, какие данные можно в нём использовать для вывода или для других манипуляций. Это можно сделать несколькими щелчками мышки.
Установите "Отладку" на демо Двойки стандартным способом. Зайдите в настройки "Отладки" в Админке и убедитесь, что она включена. На вкладке "Виджеты" включите "Показывать виджеты", "Выводить в лог данные и результаты виджетов". В выпадающих списках выберите виджет 'categories' и контроллер 'content'. Сохраните настройки и зайдите на страницу с контентом, где есть виджет "Категории контента". Например, в раздел "Статьи" http://demo/articles.

Под страницей Вы увидите не просто массив с точными индексами для Вашего виджета, а и заполненые значения элементов этого массива. Причём содержимое массива будет актуально для открытой страницы, то есть будет содержать реальные данные, выводящиеся в этом виджете на этой странице. И если в Вашем коде что-то выводится не так, как должно было по Вашему мнению, Вы всегда увидите, есть ли нужные данные на этой странице и если есть, то какие они.
Под спойлером пример - часть этого массива на скрине:
Спойлер
Ещё пример, Вы делаете новый шаблон для вывода контента. Для примера возьмём уже готовый файл шаблона из Двойки \templates\default\controllers\content\item_view.tpl.php
В настройках "Отладки" отключите вывод виджетов, оставшийся из прошлого примера, и убедитесь, что разрешён вывод контрольных точек.
Теперь в файле \templates\default\controllers\content\item_view.tpl.php после строки
Код PHP:
  1. <?php
вставьте строку с двумя контрольными точками (КТ), которые будет выводить содержимое переменных с массивом данных контента $item и массивом описания типа контента $ctype. Эти переменные используются в коде шаблона, они передаются туда контроллером.
Код PHP:
  1. dcp('item', $item);
  2. dcp('ctype', $ctype);
Откройте любую страницу любого типа контента, хоть страницу "О проекте" http://demo/pages/about.html
Вы наглядно увидите всё содержимое обеих переменных, которое передаётся в шаблон этой страницы:
Спойлер
Вы можете вставлять подобные КТ в любое место любого файла шаблона в неограниченном количестве одновременно и выводить в лог отладки любые переменные или выражения. Просто, удобно и наглядно. Требует минимальных знаний PHP и не портит шаблон, как это делает вывод через echo var_dump($переменная).

Надеюсь, теперь Вам будет проще понимать, какие данные передаются в Ваш шаблон, какие элементы массива присутствуют и что именно содержат.
Олег Васильевич я Олег Васильевич я 8 лет назад #
Комментарий удален
0
Юран Юран 4 года назад #
К сожалению не работает с версией с github:( Наверное нужно подождать выхода новой версии системы.
0
WebMan WebMan 4 года назад #
Да, с новыми версиями не работает. "Расширенная отладка" делалась на этапе развития движка под каждую версию отдельно и уже давно не обновляется, так как InstantCMS2 и так уже очень хорошо оптимизирован, а также имеет многие фичи этой отладки в "коробке".

Еще от автора

Хуки-хухуки: Исключаем неактивных пользователей из списков
Как иногда начинают свой монолог неопытные стендаперы: «У всех в жизни было такое …
«Расширенная отладка» для InstantCMS 2.14.1 (v.14.1.2) – большое обновление для разработчиков
Новые возможности и удобства, облегчающие разработчикам отладку компонентов и шаблонов.
Использование расширенной отладки. Часть 11. Анализ ошибок 403/404 и редиректов
Одной из неудобных задач при отладке для меня является поиск причины ошибки 403/404.
Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.