Профилирование c помощью xhprof.

Уставливаем расширение к php — xhprof. Расширение есть в PECL, но там оно уже не обновляется, при этом имеет баг. Так что устанавливаем ручками. Переходим в папку assets/components/ wget https://github.com/facebook/xhprof/archive/master.zip unzip master.zip cd xhprof-master/extension/ phpize ./configure make sudo make install Могут полезть ошибки что не хватает php5-dev итп. Что просит ставим. Дописываем в php.ini [xhprof] extension=xhprof.so Для отрисовки графов нужен Graphiz sudo apt-get update sudo apt-get install graphviz Перезагружаем апач или что там у вас. sudo service apache2 restart И немного почистим папку xhprof-master переименовываем в xhprof Оставляем только папки xhprof_html и xhprof_lib остальное удаляем. Создаем папку xhprof/reports для отчетов Переходим к профилированию. Первое что нужно сделать это поправить некоторые пути. В папке xhprof_html открываем файлы callgraph.php, index.php и typeahead.php. Ищем $xhprof_runs_impl = new XHProfRuns_Default( ); заменяем на $xhprof_runs_impl = new XHProfRuns_Default( dirname(dirname(FILE)).'/reports'); Теперь создаем отчеты В консоли. <?php print '<pre>'; ini_set('display_errors', 1); $modx->setLogLevel(3); $namespace = 'modxsite';

// Инициализируем профайлер - будем считать и процессорное время и потребление памяти xhprof_enable(XHPROF_FLAGS_CPU + XHPROF_FLAGS_MEMORY);

if(!$response = $modx->runProcessor('web/getdata', array(

), array( 'processors_path' => $modx->getObject('modNamespace', $namespace)->getCorePath().'processors/',
))){ print "Не удалось выполнить процессор";
return; } print_r($response->getResponse());

// Останавливаем профайлер $xhprof_data = xhprof_disable();

// Сохраняем отчет и генерируем ссылку для его просмотра include_once MODX_BASE_PATH."assets/components/xhprof/xhprof_lib/utils/xhprof_lib.php"; include_once MODX_BASE_PATH."assets/components/xhprof/xhprof_lib/utils/xhprof_runs.php"; $xhprof_runs = new XHProfRuns_Default(MODX_BASE_PATH."assets/components/xhprof/reports"); $run_id = $xhprof_runs->save_run($xhprof_data, "console");

echo "Report: assets/components/xhprof/xhprof_html/index.php?run=$run_id&source=console"; На экран выведется относительная ссылка с адресом для просмотра отчета. Через плагин. Создаем плагин на OnInitCultur и OnWebPagePrerender switch($modx->event->name){

case 'OnInitCulture':
    
    // Инициализируем профайлер - будем считать и процессорное время и потребление памяти
    xhprof_enable(XHPROF_FLAGS_CPU + XHPROF_FLAGS_MEMORY);

    break;
case 'OnWebPagePrerender':
    
    // Останавливаем профайлер
    $xhprof_data = xhprof_disable();

    // Сохраняем отчет и генерируем ссылку для его просмотра
    include_once MODX_BASE_PATH."assets/components/xhprof/xhprof_lib/utils/xhprof_lib.php";
    include_once MODX_BASE_PATH."assets/components/xhprof/xhprof_lib/utils/xhprof_runs.php";
    $xhprof_runs = new XHProfRuns_Default(MODX_BASE_PATH."assets/components/xhprof/reports");
    $run_id = $xhprof_runs->save_run($xhprof_data, "full_site");

    $modx->log(xPDO::LOG_LEVEL_ERROR,"Report: assets/components/xhprof/xhprof_html/index.php?run=$run_id&source=full_site",'xhprof');
    
    break;        

} Ссылка будет в логах. В плагин можно добавить условие чтобы срабатывал только на админах.

Спасибо! При случае опробую.

Под php7 надо чуть поменять начало гайда Создаем папку assets/components cd assets/components wget https://github.com/rustjson/xhprof/archive/refs/heads/php7.zip unzip php7.zip rm php7.zip cd xhprof-php7/extension/ phpize ./configure --with-php-config=/$PHP7/bin/php-config make && make install