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

+30
4.27K
Долгожданное обновление класса расширенной отладки и оптимизации для InstantCMS 2.2.1.
Иллюстрация

Прошу прощения за долгое обновление, был сильно занят и не мог выпустить обновление. Эта версия вышла сейчас только благодаря Loadырю, который взял на себя труд перенести предыдущую версию отладки и оптимизации на текущую версию Инстанта. Спасибо, Loadырь!

Таким образом, в этой версии ничего не добавлено и не изменено. Просто сделана совместимость с текущей Двойкой.

Описание и справку смотрите в предыдущих постах в этом блоге. Например, тут
Класс расширенной отладки для InstantCMS 2.1.0-2.1.1 (v.7) + оптимизация скорости

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

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

Если вы изменяли файлы оригинальной версии, то проверьте, не пересекаются ли ваши изменения с моими. Список изменённых файлов можно посмотреть тут Класс расширенной отладки для InstantCMS 2.1.2 (v.8) + оптимизация скорости

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

Также Loadырь выявил небольшой нюанс, важный для разработчиков. В оригинальной версии движка при создании любой страницы сразу загружаются и компилируются все файлы полей из папки \system\fields вызовом функции getAvailableFormFields() и перебором в ней файлов с расширением *.php, независимо от их использования на странице. То есть, загрузка идёт не по именам классов, а по содержимому папки. Мало того, попытка загрузить все поля может происходить неоднократно для одной и той же страницы. Это всё приводит к необоснованным тормозам. Тем более, когда в систему по мере развития добавляется много сторонних полей. Поэтому в своём патче я исключил подобные вызовы этой функции, а классы полей загружаются по мере их необходимости через автозагрузку классов. Но это значит, что если в оригинальной версии движка файлы с некорректными названиями, содержащими символ подчёркивания '_', без проблем загружались при старте вместе с остальными полями, то для работы в оптимизированной версии файлы полей должны быть без таких символов.
Например, файл \system\fields\list_advanced.php с классом fieldListAdvanced в оригинальной версии загрузится успешно, хотя это и некорректное название файла. А в оптимизированной версии выдаст сообщение о том, что не может найти такой файл. Файл должен называться \system\fields\listadvanced.php

UPD 02.10.2015
Исправление ошибки "Fatal error: Class 'cmsDebug' not found" при запуске задач кроном или при прямом вызове кастомных скриптов с подключением в них bootstrap.php (без использования index.php).
Насколько я понял, есть два способа запроса информации из CMS или выполнения действий в ней. Первый: через index.php — так запрашиваются все страницы сайта. В нём подключается bootstrap.php, в котором загружается ядро системы. Второй: прямой вызов нужного php-скрипта в обход index.php. Тогда в своём скрипте нужно позаботиться о подключении bootstrap.php для загрузки ядра. Пример такого вызова — скрипт cron.php.
Во втором случае не происходила корректная загрузка настроек и класса отладки, поэтому возникали ошибки.

Для исправления достаточно в начало файла bootstrap.php прописать отключение отладки — при кастомных вызовах она, по сути, не нужна:
  1. if (!defined("DEBUG_ON")) define("DEBUG_ON", 0);
Файл архива "Отладки и оптимизации" перезалил. По ссылке выше в этом посте уже новый архив debug_v8.1.1.zip с добавленным bootstrap.php. Для обновления уже установленной версии 8.1 достаточно обновить в системе файл bootstrap.php, заменив файлом из этого архива.
0
Val Val 8 лет назад #
Здорово!!!
Loadырь спасибо! Будем тестировать)))) +100500!
0
Алексей Т Алексей Т 8 лет назад #
Ребят спасибо! smile
0
Def Def 8 лет назад #
модети разрабочтикам официально включить сей скрипт в коробку?
0
WebMan WebMan 8 лет назад #
Обратитесь по этому поводу к r2 - это он принимает решение. Я всегда готов к сотрудничеству с разработчиками.
0
WebMan WebMan 8 лет назад #
Офтоп: Обратите внимание на глазик с циферками вверху топика возле даты. Fuze вчера вечером сделал подсчёт количества просмотров в блогах! dance
0
qwest qwest 8 лет назад #
Офтоп: Обратите внимание на глазик с циферками вверху топика возле даты. Fuze вчера вечером сделал подсчёт количества просмотров в блогах!
Офтоп: Только вот он считает за просмотр каждое обновление страницы.
0
qwest qwest 8 лет назад #
По теме автору и Loadырь огромный +++ оптимизация далеко не последняя вещь.
0
ivanish ivanish 8 лет назад #
Подскажите, что делать в этом случае
E_NOTICE: Undefined index: og_type /system/controllers/opengraph/hooks/content_before_item.php (47)
/system/controllers/opengraph/hooks/content_before_item.php (47) onOpengraphContentBeforeItem->run
/system/core/controller.php (346) onOpengraphContentBeforeItem->call_user_func_array
/system/core/controller.php (308) cmsController->runExternalHook

И второй момент - крон выдает такое Fatal error: Class 'cmsDebug' not found in /www/domen.ru/system/config/autoload.php on line 11
0
WebMan WebMan 8 лет назад #
По первому. Это предупреждение о том, что в строке 47 скрипта content_before_item.php в качестве индекса используется переменная og_type и она в момент выполнения программы не была определена. Возможно это не критично. Но лучше обратитесь к разработчику компонента opengraph.

По второму. Пытался воспроизвести ошибку на чистой системе с отладкой и оптимизацией. Запускал все стандартные задачи из управления планировщиком в админке - ничего подобного не обнаружил. Поэтому уточните, ошибка появляется для всех задач или только для одной/нескольких? Ошибку вызывают и стандартные задачи тоже или только добавленные Вами? При вызове какого контроллера и хука происходит ошибка? При каком способе запуска появляется такая ошибка - при запуске из админки или по времени планировщиком?
0
Lancelot Lancelot 8 лет назад #
То есть если у меня вылезла ошибка:
E_NOTICE: Undefined variable: center /templates/rk/content/places_list.tpl.php (56)

То мне достаточно переименовать файл без пробела и проблема решена?
0
Loadырь Loadырь 8 лет назад #
Нижнее подчёркивание касается только названий файлов полей из папки system\fields. В вашем случае речь идёт о том, что не объявлена переменная center в указанной строке 56 указанного файла шаблона /templates/rk/content/places_list.tpl.php.
0
Loadырь Loadырь 8 лет назад #
Переименование файла вам тут не поможет. Надо выяснять, где потерялась эта переменная, если она там вообще должна быть.
0
Lancelot Lancelot 8 лет назад #
ясно, спасибо за скорый ответ
0
Antuanett Antuanett 8 лет назад #
Поймал, после установки класса:
Код PHP:
  1. Notice: Use of undefined constant DEBUG_ON - assumed 'DEBUG_ON' in /var/www/html/system/config/autoload.php on line 10
  2. Notice: Use of undefined constant DEBUG_ON - assumed 'DEBUG_ON' in /var/www/html/system/config/autoload.php on line 10
  3. Fatal error: Class 'cmsDebug' not found in /var/www/html/system/config/autoload.php on line 11
0
WebMan WebMan 8 лет назад #
Класс отладки загружается не через автолоад, а в первых строках index.php. Похоже, Вы не внесли в него правки. Убедитесь, что самые первые строки в нём:
Код PHP:
  1. $debug_start = microtime(TRUE);
  2. $debug_memory = memory_get_usage();
  3. define('VALID_RUN', true);
  4. // Если разрешено, загружаем и включаем функции отладки
  5. $debug_cgf = require_once 'system/config/debug.php';
  6. if (DEBUG_ON) {
  7. include_once 'system/core/debugconfig.php';
  8. include_once 'system/core/debug.php';
  9. cmsDebug::getInstance($debug_cgf, $debug_start, $debug_memory);
  10. unset($debug_cgf);
  11. }
А для вывода отладочной инфы внизу страницы таакже нужны и нижние строки в этом же файле. В-общем, сравните Ваш index.php и такой же файл из отладки и добавьте в свой новые строки из отладки.
0
Antuanett Antuanett 8 лет назад #
Забыл упомянуть, что проблема возникает только при запуске cron.php . В обычном режиме всё работает корректно, но заметил, что после установки класса задачи по крону не выполняются, полез разбираться и поймал эту ошибку.
0
WebMan WebMan 8 лет назад #
Проверю.
0
Antuanett Antuanett 8 лет назад #
Если нужна информация дополнительная - пишите!
0
Loadырь Loadырь 8 лет назад #
В файле cron.php нужно тоже самое прописать, как в index.php.
0
Antuanett Antuanett 8 лет назад #
Я думаю, этот надо поправить в дистрибутиве.
0
WebMan WebMan 8 лет назад #
Да, при запуске планировщика действительно не стартует класс отладки, не загружается его конфиг и переменная DEBUG_ON системе неизвестна.
Есть два варианта:
Первый, простой - отключить отладку для планировщика. Достаточно добавить в начало файла cron.php строку
Код PHP:
  1. if (!defined("DEBUG_ON")) define("DEBUG_ON", '0');
Второй - прописать в cron.php запуск отладки и вывод отладочной информации, как в index.php. К сожалению, этот вариант я сейчас проверить не могу. Если кто-то проверит - отпишитесь о результатах, пожалуйста.
0
WebMan WebMan 8 лет назад #
Обновил "Класс отладки" до версии 8.1.1. Включил исправление для устранения ошибок при вызове скриптов из крона и по прямым путям. Добавил в этот топик описание ошибок и исправления. Перезалил архив.
0
Birles Birles 8 лет назад #
Будет обновление для icms 2.3.0?
0
WebMan WebMan 8 лет назад #
Будет. Не раньше, чем через неделю, а то и две. Сильно занят. sad
0
Birles Birles 8 лет назад #
Отлично!

Еще от автора

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