Класс расширенной отладки для InstantCMS 2.1.0-2.1.1 (v.7) + оптимизация скорости

+40
4.52K
Обновлённая версия класса расширенной отладки для InstantCMS 2.1.0-2.1.1.

Добавил в этой версии:
-------------
+ Перехват и вывод в лог ошибок PHP.
+ Сообщения админу о критических ошибках.
+ Вывод пользователям (не админам) заданного текста вместо информации об ошибке.
+ Блоки в настройках сделаны в виде вкладок.
+ Добавлены фильтры для автозагрузок классов.
+ Сделан учёт расхода памяти на отладку – строка 'debug' в блоке 'Memory' суммарной таблицы. При минимальных настройках класс использует всего 11 килобайт.
+ Подсветка цветом медленных запросов в логе.
+ Подсветка цветом "тяжёлых" хуков в логе.
+ Подсветка цветом "тяжёлых" виджетов в логе.
+ Добавлена обработка строковых параметров в настройках. Теперь можно использовать одинарные и двойные кавычки в строковых полях настроек.
+ Функция вызова точки отладки 'DebugCheckPoint' теперь имеет другое, более короткое имя 'dcp'. Я замучался писать длинное имя при постоянном её использовании и решил упростить жизнь себе и вам. 😊

• Расширенная информация о времени работы CMS и её частей/операций
• Лог автозагрузок классов и инклудов файлов и суммарная таблица инклудов.
• Лог обращений к БД (SQL-запросов и коннектов).
• Лог и суммарные таблицы событий и хуков.
• Лог и суммарная таблица виджетов.
• Лог работы с кэшем.
• Фильтры для логов операций – позволяют выводить только интересующую информацию.
• Информация об ошибках, о входных данных и результатах работы отслеживаемых операций в логах.
• Подсчитывается время работы контроллера (полезно для создателей компонентов).
• Подсчитывается время рендеринга шаблона (пригодится разработчикам шаблонов).
• Контрольные точки в коде для получения подробной информации о php-скриптах.
• Информация о памяти скрипта (суммарная и в контрольных точках).
• Настраиваемые логи отладки выводятся под подвалом страницы, не изменяя саму страницу.
• Управление параметрами отладки производится через новую вкладку «Отладка» в админке.
• В Админке показывается предупреждение-напоминание о включённой отладке.
• Наглядный список текущих параметров отладки в "Панели управления".
• При отключении отладки она практически не влияет на скорость работы CMS.
• Цветовое оформление логов и другой информации сделано через отдельный css-файл.
• Текстовые строки из настроек в админке вынесены в языковые файлы.

Сделаны оптимизации:
---------------------------------
• Убраны повторные выполнения одних и тех же инклудов. В оригинальной версии их количество иногда переваливало за 800, теперь от 40 до сотни с чем-то.
• Кеш теперь не запускается, если он отключён в конфиге. В оригинальной версии он всегда запускался, даже при его выключении в настройках. Экономия около 5 мс.
• Отключена загрузка и обработка виджетов в Админке, они там всё равно не используются. Админка теперь загружается на 20-25% быстрее – выигрыш 60-80 мс.
• Отключена загрузка списков полей виджета «Список контента», если опции виджета запрашиваются не из Админки. В версии 2.1.0 при загрузке этих опций запрашивается много списков. Из-за этого виджеты со списком контента загружались по 40 мс вместо прежних 7-9 мс. Если на главной странице таких виджетов четыре, то получали совершенно неоправданные тормоза в 130 мс. Теперь их нет.
• Отключение загрузки классов всех полей форм (20 штук). Загрузка только по мере использования (обычно 5-12 штук). Выигрыш порядка 10-15 мс.

Итого сравниваем время в мс:
  1. Страница Оригинальная Оптимизированная Ускорение, разы
  2. -------- ------------ ---------------- ---------------
  3. Главная (гость) 514 220 2,34
  4. О проекте (гость) 260 122 2,13
  5. Главная (админ) 716 292 2,45
  6. О проекте (админ) 466 192 2,43
  7. Админка – Настройки 446 142 3,14
  8. Админка - Меню 412 91 4,53
Время везде указано для моего компа в миллисекундах. У вас дома и на хостинге оно будет отличаться, но пропорции останутся примерно те же. Время в таблице – минимальное из десятка обновлений страницы.

Иллюстрация

Скачать класс отладки можно тут

Достаточно просто распаковать содержимое архива с заменой файлов в папку с уже установленной системой.
Это версия только для InstantCMS 2.1.0-2.1.1.

В конфиге по-умолчанию отладка уже включена (смотрите новый раздел "Отладка" в "Настройках" админки). Если отладочная информация на сайте не показывается, убедитесь, что вы зашли под админом или выключите параметр «Показывать отладочную информацию только администраторам».

Совет для ситуаций с «белыми страницами». Если после любых ваших действий сайт перестал загружаться и выдаёт белые страницы, зайдите в Админку и включите эту отладку, а в ней перехват ошибок PHP и вывод стандартных ошибок PHP. На страницах должна появиться информация об ошибках.
Если и Админка не открывается, то любым подходящим файловым менеджером отредактируйте файл настроек отладки ' \system\config\debug.php', изменив следующие строки как тут:

  1. if (!defined("DEBUG_ON")) define("DEBUG_ON", '1');
  2. 'debug_on_error' => 1,
  3. 'error_display' => 1,
Суммарные изменения в оригинальном InstantCMS 2.1.0-2.1.1:
\index.php
\system\config\autoload.php
\system\controllers\admin\frontend.php
\system\controllers\admin\actions\install_finish.php
\system\controllers\admin\actions\settings.php
\system\controllers\content\model.php
\system\controllers\content\widgets\list\options.form.php
\system\controllers\messages\model.php (исправление ошибки в addNotice())
\system\controllers\typograph\hooks\html_filter.php
\system\core\cache.php
\system\core\config.php
\system\core\controller.php
\system\core\core.php
\system\core\database.php
\system\core\eventsmanager.php
\system\core\form.php
\system\core\mailer.php
\system\core\model.php
\system\core\template.php
\system\languages\en\controllers\admin\admin.php
\system\languages\ru\controllers\admin\admin.php
\templates\default\admin.tpl.php
\templates\default\main.tpl.php

Если вы уже изменяли для себя какие-то из этих файлов, то сделайте сравнение моих версий с вашими файлами и внесите изменения в свои файлы вручную.
Файлы класса отладки (добавленные к оригинальной InstantCMS 2.1):
\system\config\debug.php
\system\controllers\admin\actions\settings_debug.php
\system\controllers\admin\forms\form_debug.php
\system\core\debug.php
\system\core\debugconfig.php
\templates\default\controllers\admin\settings_debug.tpl.php
\templates\default\css\debug.css

Также вы можете скачать и почитать:

Полное описание возможностей класса отладки (html-файл в архиве)

Подробное описание выводимых значений, настроек отладки в админке и использования точек отладки (html-файл в архиве)


Временно добавил демо
Ссылка закрыта от поисковиков обычной авторизацией.
Имя: tester
Пароль: tester
Сайт только для гостей, регистрация запрещена.



UPD 2014.08.08 — Обновление для 2.1.1

В новой версии InstantCMS 2.1.1 обновлён только один из файлов, связанный с отладкой
\system\controllers\admin\actions\install_finish.php

Обновил его в пакете отладки v7.1. Архив перезалил. Скачайте заново по обновлённой ссылке. В принципе, отладку 7.1 можно ставить и на 2.1.0, и на 2.1.1.

Установка отладки с оптимизацией та же, что и раньше – просто распаковать архив в уже установленную CMS с заменой файлов. Если уже обновились на 2.1.1 патчем от r2 или онлайн-обновлением – тоже просто распакуйте архив с отладкой поверх обновлённой системы.
0
WALTERZ WALTERZ 10 лет назад #
Сильно, +
+2
WebMan WebMan 10 лет назад #
laugh Ага! Мне самому нравится! v
0
PIN PIN 10 лет назад #
Как на счет привязки к сторонним шаблонам?
+1
WebMan WebMan 10 лет назад #
Так как информация об отладке выводится под готовой страницей (ещё точнее - ниже тегов </body> и </html>), то отладка будет работать с любым шаблоном. Всё, что нужно будет сделать для добавления настроек в Админку и включения цветового оформления - скопировать в новый шаблон файлы \templates\default\controllers\admin\settings_debug.tpl.php и \templates\default\css\debug.css. А в \templates\default\admin.tpl.php и \templates\default\main.tpl.php добавить подключение debug.css как это сделано сейчас в дефолтной теме:
main.tpl.php:
Код PHP:
  1. <?php if (DEBUG_ON) { $this->addMainCSS("templates/{$this->name}/css/debug.css"); } ?>
admin.tpl.php:
Код PHP:
  1. <?php $this->addMainCSS("templates/{$this->name}/css/debug.css"); ?>
+1
Олег с клещами Олег с клещами 10 лет назад #
Добавил в закладки на будущее
+1
eoleg eoleg 10 лет назад #
+
Подсветка цветом медленных запросов в логе.
Для 1 ветки ктото делился хаком который выводил время выполнения запросов к базе.
Очень наглядно было.
+2
WebMan WebMan 10 лет назад #
Скачайте и почитайте описание, eoleg. А ещё лучше - поставьте на локалку и погоняйте. Там всё есть, в том числе и время каждого запроса. Да и вообще, время считается для всего, что выводится в лог.
Медленные запросы выделяются цветом фона так

Через css можно изменить оформление на желаемое.
0
eoleg eoleg 10 лет назад #
ну и отлично! smile
0
WebMan WebMan 10 лет назад #
Временно добавил демо-сайт. Вход смотрите внизу топика. Сайт только для гостей, регистрации нет. Просто как пример выводимой информации. Очень наглядно видно что за чем происходит и вызывается.

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

З.Ы. Хостер только что что-то делал на сервере, теперь php иногда притормаживает. Если время генерации страницы получилось слишком большое (больше 200 мс), обновите её.
Олег Васильевич я Олег Васильевич я 10 лет назад #
Комментарий удален
+3
WebMan WebMan 10 лет назад #
На самом деле движок InstantCMS 2 очень классный, продуманный, толковый. И при таких богатых возможностях он в оригинальной сборке работает, как минимум, не медленнее других известных систем. Я вообще не представляю, как r2 придумал и сделал всё это практически в одиночку. Большое ему уважение и спасибо! v

Но нет предела совершенству. smile Я просто добавил несколько проверок, чтобы не повторялись некоторые уже выполненые операции. И скорость стала вообще супер. По моим прикидкам, если изменить ещё несколько стуктурных моментов, то можно выиграть ещё процентов 20 или чуть больше. Но это уже будет не небольшой хак, а серьёзное изменение некоторых принципов ядра, требующее очень чёткого понимания как там всё работает и связано. У меня такого понимания нет. А r2 сейчас работает над другими, более важными для всех вопросами. Так что и этого хака оптимизации для реальных сайтов пока хватит с головой, на мой взгляд. На этом же хостинге у меня работает простой самописный чисто php-шный сайт без CMS со временем создания страниц 30-100 мс. А тут такая навороченная CMS выдаёт гостям главную с виджетами за 100 мс или чуть более. Это круто!
-2
Алексей Т Алексей Т 10 лет назад #
WebMan + Отлиная работа!
Глянул все гуд
0
WebMan WebMan 10 лет назад #
Спасибо.
Посмотрите, пожалуйста, в "Админке - Компоненты" работают ли настройки компонентов для любого из них. У меня на локалке во всех тестах настройки открываются нормально, а на хостинге вместо страницы настроек только текст "Компоненты: Название_компонента" и дальше белый лист. Хочу понять, это с хостингом что-то, криво там стало или есть реальная ошибка.
-2
Алексей Т Алексей Т 10 лет назад #
Открываются нормально настройки есть
0
WebMan WebMan 10 лет назад #
Спасибо. Значит при переносе на хостинг что-то косо стало.
0
Aryuts Aryuts 10 лет назад #
Что-то демо сайт тормозит. При входе главная страничка показала время 14 сек (думал, что сайт не работает)!!! Следующие около 8 сек, а некоторые около 2 сек. При обновлении страничек время уменьшается до 200 мс.
0
WebMan WebMan 10 лет назад #
Да, это на хостинге тормоза. Написал им, решают...
0
WebMan WebMan 10 лет назад #
Демо-сайт переехал на новый сервер. Смотрите и наслаждайтесь Двойкой: время создания главной страницы - 70 мс, "О проекте" - 46 мс. Красота!!! dance
0
Aryuts Aryuts 10 лет назад #
Нужно будет протестировать. А не кеширование ли дает такой выигрыш (обновление страницы не изменяет, практически, время работы скрипта)?
+1
WebMan WebMan 10 лет назад #
Вчера на старом сервере без кэширования файлов и БД создавало гостям главную с виджетами за 100 мс или чуть более.
Сейчас на новом более мощном сервере с кэшированием файлов и БД то же самое создаёт - от 70 мс. И при этом вообще отсутствуют вчерашние тормоза по несколько секунд. Так что кэш, конечно, играет свою роль. Но основной выигрыш - за счёт исключения повторяющихся уже выполненых операций и другой оптимизации.

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

Для замера времени в оригинальной версии нужно добавить строки в файл index.php в корне сайта:

в самом начале файла, перед всеми строками

Код PHP:
  1. $debug_start = microtime(TRUE);
и в самом конце, после всех строк

Код PHP:
  1. echo "Full time: ".round((microtime(TRUE) - $debug_start)*1000, 1)." ms";
После этого можно обновить страницу и внизу под страницей будет написано время её создания.
В версии с расширенной отладкой это и многое другое сразу отображается в таблице отладки.
0
Aryuts Aryuts 10 лет назад #
Хорошо. Завтра под вечер постараюсь проверить.
0
Aryuts Aryuts 10 лет назад #
Провел обещанное тестирование:

Страница Оригинальная Оптимизированная Ускорение, разы
-------- ------------ ---------------- ---------------
Главная (гость) 1760 (1120) 789 (490) 2.23 (2.29)
О проекте (гость) 1020 (484) 438 (350) 2.33 (1.38)
Главная (админ) 2350 (1350) 1100 (660) 2.14 (2.05)
О проекте (админ) 1380 (720) 710 (531) 1.94 (1.36)
Админка – Настройки 1390 (765) 477 (350) 2.91 (2.19)
Админка - Меню 1271 (578) 328 (218) 3.88 (2.65)

Тестирование производилось в браузерах Firefox и Chrome с использованием WAMP под WindowsXP. Первая цифра соответствует времени загрузки страницы без кеширования, а вторая в скобках с кешированием.
0
WebMan WebMan 10 лет назад #
Спасибо за инфу. Только уточните, какое именно кэширование Вы тестировали. Может Вы имели ввиду "без оптимизации" и "с оптимизацией"?
0
Aryuts Aryuts 10 лет назад #
Таблица такая же как у Вас: в первой строчке 1760мс время загрузки главной страницы в оригинальной кмс, а 789мс с Вашей оптимизацией. А вот в скобках 1120мс и 240мс при включенном файловом кешировании (можно было еще кеширование мемкешед попробовать). Кеширование в начтройках админки включается.
0
WebMan WebMan 10 лет назад #
Теперь понятно. Вы подтвердили что выигрыш по скорости более, чем в два раза. Спасибо.
0
Azura Azura 10 лет назад #
Отличная работа! + в карму! smile Творите ещё :)
0
WebMan WebMan 10 лет назад #
UPD 2014.08.08 - Обновление для 2.1.1
0
Aryuts Aryuts 10 лет назад #

Проблемы с вычислением времени
0
Aryuts Aryuts 10 лет назад #
Это скрин с Вашего демо-сайта. Обнаруживается при первом заходе на страницу (видать пока не кеширована).
0
WebMan WebMan 10 лет назад #
Спасибо, Aryuts, я проверю код.
0
WebMan WebMan 10 лет назад #
Всё, понял. Цифры на скрине правильные. Время контроллера и рендеринга страницы считается полное, включая запросы к БД, а не только ПХП. Чтобы можно было оценить суммарную работу того или иного контроллера или шаблона. Это полезно при добавлении новых компонентов или шаблонов, при хаках, при обновлении и подобном.

В данном примере во время работы контроллера были тормоза при запросах к БД от котроллера или его частей. Соответственно, время этих запросов тоже входит в общее время контроллера.
Если Вы увидите аналогичную картину ещё раз, просто посмотрите запросы к БД в логе ниже этой таблицы, выделенные жёлтым фоном - так выделяются медленные запросы (оформление можно изменить через css). Как раз они и тормозили работу контроллера. Всё очень наглядно.
0
Aryuts Aryuts 10 лет назад #
Ясно. Тогда логичнее эту информацию разместить после script time и величину в процентах указать относительно общего времени выполнения.
+1
WebMan WebMan 10 лет назад #
Видимо так и сделаю в следующей версии. Спасибо!
+1
WebMan WebMan 10 лет назад #
А куда разместить "виджеты" и "события/хуки"? Ведь в их время тоже включаются и все инклуды, и все запросы к БД, сделанные во время обработки виджетов/хуков.
Если следовать Вашей логике, то их тоже нужно переместить в первую колонку "Скрипт" и считать процент времени от времени скрипта.
Сделал на локалке такое перемещение. В колонке "Скрипт" отображаются все допустимые строки. Но чаще всего последних двух строк (лаги и точки отладки) не бывает. Так подходит? Если да, то так и будет в следующей версии.:
0
Aryuts Aryuts 10 лет назад #
Думаю, что так логично. Но нужно, чтобы и другие высказались. За оперативность 5+. Спасибо. Да, возле debug можно вывести debug time.
0
WebMan WebMan 10 лет назад #
Если желающие выскажутся - учту их мнение. Если нет, оставлю так.

Параметр debug находится в колонке Memory, так как показывает использование памяти классом отладки. Переносить в "Память" параметры, относящиеся ко времени не вижу смысла. Делать отдельную колонку для всех параметров класса отладки - слишком удлиннит таблицу без особой на то необходимости. Пока пусть остаётся как есть.
0
Aryuts Aryuts 10 лет назад #
Тогда имеет смысл их (debug time, full time) вынести в самый низ как было.
Только, что обратил внимание, что в старом варианте была таблица с количеством инклудов большая, а сейчас небольшая. В чем причина?
0
WebMan WebMan 10 лет назад #
debug time и full time и так самые нижние среди параметров со временем в колонке "Скрипт".. Ниже них только время лагов и количество точек отладки. На демо-сайте просто отключены лаги и нет точек отладки, поэтому строки с ними не выводятся.

Количество строк с инклудами в отдельной таблице зависит от настроек. Можно выводить весь список подключаемых файлов - десятки или больше сотни. А можно выводить только ошибочные или повторяющиеся инклуды - тогда строк станет мало, так как ошибок мало, а повторения я исключил оптимизацией.
Поставьте себе на локалку и поиграйтесь с настройками. Или скачайте описание настроек - там всё описано.
+2
WebMan WebMan 10 лет назад #
Сделал такое же размещение блоков и на демо-сайте.
0
Aryuts Aryuts 10 лет назад #
О, отлично теперь. Надо, что-то сварганить на этой версии кмс.
0
Антон Антон 10 лет назад #
В файле темы лучше (наверно) сделать:
Код PHP:
  1. <?php if (DEBUG_ON && cmsUser::isAdmin()) { $this->addMainCSS("templates/{$this->name}/css/debug.css"); } ?>
Или условие на авторизованность.

Иначе при включенной отладке для всех грузится дополнительный файл. Это из разряда ускорения работы :)
+1
WebMan WebMan 10 лет назад #
Если проверять на админа, тогда если разрешён показ отладочной информации для всех пользователей, то для гостей и обычных пользователей файл оформления подгружаться не будет - это неправильно.

Если хочется оптимизировать и этот участок кода, то можно загружать css в основном шаблоне main.tpl.php только если разрешён вывод отладочной инфы:
Код PHP:
  1. <?php if (DEBUG_ON && cmsDebug::getInstance()->allowShow()) { $this->addMainCSS("templates/{$this->name}/css/debug.css"); } ?>
В шаблоне админпанели admin.tpl.php загружать стили нужно всегда. Они используются и при отладке, и при выводе текущих параметров отладки в Настройках.

Кстати, нужно будет в новой версии переименовать в классе отладки функцию allowShow() в isAllowShow() - так правильнее по канонам ООП.
0
Антон Антон 10 лет назад #
Да, забыл сказать спасибо.

Отличный класс. Выловил лишние обращения к серверу. На работоспособность не влияло и нигде не было видно. Но лишние запросы к несуществующим файлам тоже ни к чему.
0
Loadырь Loadырь 10 лет назад #
Нашёл проблемку, возможно она только у меня. Вчера поставил чистую 2.1.1 на локалку и залил последние файлы отладки из этой темы. При включенном режиме отладки, когда я устанавливаю виджет в нужное мне место - не появляется в модальном окне форма с настройками виджета. После перезагрузки страницы с виджетами, этот виджет стоит там где я указал, с настройками по дефолту, и при нажатии на кнопку редактировать. открывает форму редактирования в модальном окне, как и задумано. Если выключить режим отладки, то виджеты работают нормально, и форма редактирования вылетает сразу при установке виджета в нужное место.
0
WebMan WebMan 10 лет назад #
Спасибо, проверю.
0
WebMan WebMan 10 лет назад #
Баг подтверждаю. Он действительно проявляется только при включённой отладке и только в этом месте админки. При отключённой отладке он не проявляется. Так что можно спокойно использовать отладку и оптимизацию из этой темы на реальных проектах. А я доберусь до домашнего компа через недельку и постараюсь его исправить.
0
Антон Антон 10 лет назад #
Нашел проблему. Прошу проверить (возможно она только у меня).
Проверял на чистой 2.1.1.
При создании нового типа контента не создаются поля по умолчанию.
При попытке создания поля белый экран.
+1
WebMan WebMan 10 лет назад #
Такую же проблему несколько раз наблюдал на чистой 2.1.1 (без отладки и любых других модификаций). Иногда список полей виден, иногда - нет. В том числе у уже существующего типа контента. С чем связано - не знаю.

В варианте с отладкой сейчас наблюдаю следующую картину: если отладка выключена - поля в списке полей чаще не видны (хотя и создаются), при включении отладки все поля появляются в списке как обычно. Поэтому в своём проекте пока просто включил отладку и создаю всё, что мне нужно.

Сейчас просто физически не получается выяснить этот баг и предыдущий (см. выше) - я всё время вне дома и ещё неделю две буду в разъездах.
0
Azami Azami 8 лет назад #
Извините, могу ли я воспользоватся этим для версии 2.1.2
0
WebMan WebMan 8 лет назад #
Конечно! Для вашей версии есть Класс расширенной отладки для InstantCMS 2.1.2 (v.8) + оптимизация скорости.
А что мешает обновиться до последней версии CMS и получить все её новые прелести?
0
WebMan WebMan 8 лет назад #
Добавлю. Все последние версии и статьи по использованию есть в моём блоге. Последняя актуальная версия теперь есть и в Каталоге дополнений.

Еще от автора

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